tp5帐号登陆的几点注意
对于一个差不多的网站,安全性重中之重。如果利用TP5从无到有书写,会出现很多安全性问题;如果利用thinkcmf诸如此类的内容管理框架,安全性问题倒是少了,但写代码不是那么自由。
- ADMIN与admin都能登陆,mysql查询不能分辨大小写
发现网站不区分用户名的大小写。输入admin和ADMIn,或者其它诸如此类,同样可以登陆。以前用的是内容管理框架,倒从来没发现这样的情况。
网上搜索的答案,普遍两种方法,但其中一种(修改建表语句的sql), 笔者这里没试通。只有下面的方法可以:
即:在搜索的字段 name 前加上 binary 以确保大小写敏感。
- sql注入
理解什么叫sql注入很简单,网上教程很多。但是解决起来,有点问题,大海捞针的感觉。
所以最重要的是:利用相应的测试工具或辅助软件进行检测。 再强调一遍,这是最重要的。
- 那么如何解决呢?
还是把sql注入当做小偷偷东西吧,防止小偷偷东西,可以从三个角度分析:
-
把门关的死死的,不让小偷进去
放在程序中就是对输入的参数进行正则过滤,永远不要相信用户输入的数据。可以自定义一个数据验证层。如果想简单一点,搞一个正则验证。都可以。 -
把柜子锁起来
这个是核心。截张图如下:
其实框架本身提供的搜索查询语句几乎已经保证了sql注入。但有时写的时候,要注意点。如上图,不得已在where里面写了sql语句,赋值的时候,预绑定的写法还是不错的。其它几种写法就不在这里总结了,网上很多,这里只是另外的一个思路。
- 偷走了东西,但是这东西对小偷没用
前几年还有偷手机的现象,这几年很少了。原因之一就是偷去了也没用,手机锁、微信、支付宝的各种验证,完全可以预防现有各种破解。
对于防止sql注入也是的,要对数据库中的敏感信息进行加密或其它处理。即使别人利用sql注入将信息偷了出去,看不懂,也是枉然。
3.两种方式输入空格
一般而言,帐号和密码中是不允许使用空格的。这分为两部分:前端控制和后端验证。
前端控制:onkeyup="this.value=this.value.replace(/^ +| +$/g, '')"
这个属性挺好玩的,up向上的意思,即当松开键盘的时候,执行这个方法。不过这个属性也有缺陷,当输入两个字母,再返回,在中间输入空格,是可以的。比如这样:a b。中间的空格是输入b后再返回ab中间而输入的。
后端控制: 便是利用PHP进行筛选。比如: strpos($name," ")
4.禁止使用admin/123456
近几天在公众号上连续看到几篇文章,对admin/123456大加斥责。不管是admin还是123456,不用最好。
5.连接数据库时禁止使用root帐户
看到大多数的网站,配置文件中都用root连接数据库。这样一旦密码被破解,整个数据库就完全暴露了。如果单独创建用户,设置权限,会安全很多。
同样的原理在于CentOS,大多数人直接操作root,如果为每个人创建一个特定用户,分配权限组,分配权限,会安全很多。同时,个人用户也可以创建自己的个人信息。
6.php的加密方式反对使用md5
- md5是可以暴力破解的
- md5不是用来加密密码的,是用来校验数据完整性的。它的计算速度很快,而计算速度很快,意味着暴力破解/穷举法等成为可能。
在php中可以使用password_hash,如下截图:
具体如何使用可以google,这里只是个引子。印像中,可以对时间进行控制,这样,就大大加深暴力破解的成本了。当然,密码长度是王道,外加上字母特殊字符的搭配。
7.改变端口号,比如22和3306
改变端口号也是个不错的选择。这个就看个人选择了或者特殊情况。笔者认为没那个必要,有时候统一有统一的好处。