首页 > PHP 网站安全性的问题

PHP 网站安全性的问题

如何才能高效地检查 PHP 网站的安全性,如 SQL 注入、XSS 之类的?

參見:http://.com/q/1010000000491230


为什么踩?

PHP不适合“检查”网站的安全性,PHP性能较低且不适合耗时计算,因此不能“高效”地进行类似语法扫描一类的安全检查。应该借助其他工具来检查安全性。

虽然很有可能问问题的仁兄自己没表达清楚,但目前的情况楼上确实都答跑题了。。。

安全问题要细心,业务安全靠经验,中几次枪就知道了。代码层面上要考虑的主要有五项

1、SQL注入。用PDO、mysqli_*的参数化查询来查询数据库,使用数据库预处理;
2、XSS攻击。正常情况下不存在特殊字符的使用htmlspecialchars转义,反之过滤特殊字符;
3、CSRF。严格来说非幂等操作都加上token,但实际上比较重要的接口验证一下就行了;
4、权限控制。比如登录状态、操作权限之类的,用session/cookie加密后维护登录状态,用RBAC之类的方案验证权限;
5、文件验证。上传、删除、修改文件都要严加验证防止二鬼子使坏

默擦的回答也很完整,但我估计没什么用,类似的问题哪都是一搜一大把,而问问题的代码猴们该怎么出岔子还是怎么出岔子。你们哪,毕竟too young。


3. 时常检查PHP主版本是否在支持范围内,次版本是否升级到了最新。
事实上根据PHP生命周期时间表,低于5.4版本的php从现在开始都不应当继续使用。


推荐一个软件,NetSparker
我从昨天早上,就开始使用这个软件,对我公司的网站进行了扫描,结果发现了23个issues,其中一个SQL注入

感觉这软件还可以,只是扫了一天一夜+一个上午


多去乌云网站看看那些披露出来的漏洞,看看人家怎么入侵,你就知道怎么防了


  1. sql注入
    使用mysqli 中的绑定参数
  2. xss之类
    这个需要你自己注意,简单点的处理就是凡是用户允许输入的地方,在入库前,都进行转义

1.打死也不要手工拼接sql语句,全改成参数化查询(如果用了只能一个一个找,把用户能影响到的那部分给转义了).

2.关于xss是进库之前过滤好还是出库时过滤好,我也没个准确的答案,个人是倾向进库前过滤的,毕竟团队不是每个人都有安全意识,在出库时再过滤的话,有可能有人员会疏忽,后果你懂的,安全出问题往往是最薄弱的那一环节.

只要是不应该出现html标签的地方,都记得要过滤,哪怕是上传图片后的图片地址,友情连接的a标签.

htmlpurifier是一个很好的xss过滤库,不过也挺占资源的,要在出库时过滤的话,就得配合缓存.

做到这里,应该就只剩界面劫持的漏洞了吧?这个就比较难防御了,因为没有过滤css,在发布文章等富文本时,我发一个高仿登录框的html代码,搞成在屏幕居中且悬浮在最上层,有多少用户看到这个登陆框会手贱输入帐号信息然后点击登陆?那form标签要过滤吗?要是用户想发个投票帖怎么办?....这个就得看设计思路了...

3.csrf这玩意很多人会忽略的,只要在能对数据进行修改的地方,我都觉得得加一个token避免,token的话我觉得生成一次放在cookie里并设置http-only就够了,凡是有表单是修改的,或者有个地址加个id就可以删除的,都要带上这个token,并且在php里验证是否一致.

4.能删除文件的地方,得记得过滤啊,要是人家传个../../之类的文件名,你什么都不判断就删了,文件任意删除漏洞就出来了,读取的话同理.

5.接口安全啊,提供给客户端的接口,记得多多判断啊,比如一个给app用的登陆接口,没验证码的话,就容易被爆破了;获取用户信息的接口,没有校验来源的身份的话,那用户信息泄漏就出来了.

6.图片不防盗链真的好吗?我去各大论坛想办法挤到最热帖子的第一页,发n个图片,图片连接全是你的图,你网站的速度和流量...不忍直视啊.

7.上传漏洞就懒得说了,反正有文件上传的地方都得判断,免得别人直接传个shell...

8.调用系统命令时候,如果有能被用户影响部分的也要记得过滤再过滤,想想最近的bash漏洞就懂了...

9.业务逻辑漏洞,像商品价格,数量负数这个应该都科普了吧,像身份认证这种只要cookie里有个flag=1这种就能进后台现在也少了吧?逻辑漏洞还是去乌云看看各大厂商的比较好

10.人员的安全意识也很重要啊,要是人家密码硬是用了个弱密码,或者跟个人信息密切相关的密码,然后被社工到也是没办法的是吧.你要是给个复杂的密码,人家把密码保存在txt里,然后电脑中毒了你也没办法的是吧.要是随便来个人对管理员说:你们网站是我做的,现在要升级了,没有帐号进不去,麻烦你给我下,管理员就傻乎乎地给了,你也是没办法的是吧...到最后基本都是人员的安全问题了.

11.切记一定要把用户当成大恶人啊,用户提交的数据都是不可信的啊...php层一定要判断再判断,过滤再过滤啊...到这里应该web层的都走了个遍吧?遗漏的就等小伙伴们帮补充了,服务器安全性的我是个渣,就不多说了

【热门文章】
【热门文章】