一、SQL注入

SQL注入是WEB开发中常见的安全问题,也是比较严重的安全问题。

SQL注入发生的根本原因就是WEB页面间传递参数时没有作相应的检查和过滤。

SQL注入的防御方法:如果是数字参数,一定要检查是否为数字型,不要使用PHP的内置函数检查,自己写一个正则表达式;字符参数,过滤常见的SQL语句关键字。

PHP开发中的常见安全问题总结

二、XSS漏洞

XSS漏洞也是跟页面参数有关的。

遵循良好的页面代码习惯即可防范出现XSS漏洞,即:任何页面在接收参数时,在最开始的代码处,先检查参数的合法性(合法性检查包括类型合法、安全合法、逻辑合法),对参数进行XSS过滤即可。

没有检查的参数,如果在网页代码中输出,即会造成XSS漏洞。

PHP开发中的常见安全问题总结

三、表单输入在经JS检查以后必须要使用PHP再次检查

JS检查表单输入是否合法,是为了提高用户体验,但并不安全。JS检查代码是最容易绕过去的,在黑客面前基本上等于形同虚设。

总之,开发人员不能信赖前端JS对于参数的检查或过滤。

PHP开发中的常见安全问题总结

四、避免传递不必要的参数

比如一篇新闻的详情页面的地址为news.php?id=3&sort=5,id是该新闻的唯一标识(系统编号),sort是分类的编号。类似于这种情况,sort这个参数就是没有必要传递的,因为设计正确的数据库中,能够通过id=3查询到sort=5。

传递不必要的参数,如果不经一致性检查,在故意传递错的参数的情况下,可以造成页面内容显示不合理,有的情况下还能造成“看到别人的数据”的安全问题。

五、如何避免“看到别人的数据”?

笔者记得在读大学的时候,在学校教学系统查看成绩单的时候,在网址的参数中,把自己的学号改为其他人的学号,就能看到别人的成绩单。相信不少人在各种各样的信息系统或网站上有过类似的经历。

这类问题的发生原因,主要是编写程序时,把当前登录用户的标识,放在参数中进行传递,然后又未对参数的合法性或者完整性进行检查。

避免这类问题的一般方法:用户登录以后,使用session存储和获取当前登录用户的唯一标识,不在页面间进行传递。

PHP开发中的常见安全问题总结

综上所述:PHP开发中的遇到的大多数常见安全问题,都是由于页面间传递参数导致的,一方面尽量减少参数传递,能不传就不传,能少传就少传;一方面只要是传递参数,在接收参数的页面,最先进行参数的各种检查,所有检查通过了,再让参数进入业务函数中。

相关文章