PHP安全漏洞的安全负有直接责任的主要是什么?(上)
优采云 发布时间: 2021-08-09 05:23PHP安全漏洞的安全负有直接责任的主要是什么?(上)
项目招商找A5快速获取精准代理商名单
目前,PHP 凭借其强大的功能、简单的入门和高代码执行效率,已经成为一种流行的 Web 应用程序开发语言。由于其广泛使用,利用PHP安全漏洞攻击Web网站的事件越来越多,对Web应用的安全构成严重威胁。对网站的安全负有直接责任的主要有两类人:一类是网站Developer;另一个是网站管理员。本文作者从网站开发的角度,对PHP安全漏洞的防范进行了较为全面的总结和研究。
对以往大量攻击案例的研究表明,导致PHP安全漏洞的主要原因是未能严格验证用户的输入以及未能正确逃逸系统的输出。永远不能盲目信任用户输入。在验证之前,它可以被认为是受污染的数据。未进行适当转义的系统发现也可能带来更大的安全风险。
1、没有严格验证用户输入,导致安全漏洞及其防范
考虑一个系统登录验证,这个系统需要用注册时填写的邮箱和密码登录。一般情况下,只要输入正确就可以登录。如果输入错误,则不允许登录。这是通常的处理流程。程序实现一般是通过登录表单获取用户输入的邮箱和密码,然后传递给程序构造SQL查询语句,例如:select count(*)from users where email=''and password='mypass',然后将此SQL语句提交到后端数据库执行。如果返回的记录数为0,则表示输入的电子邮件或密码错误或用户根本没有注册。系统拒绝登录,否则为合法用户,允许登录。这个验证过程对普通客户非常有效。如果他们没有注册或没有正确的电子邮件地址和密码,他们将无法登录系统。但对于黑客来说,情况就不同了。完全可以设计一个字符串来代替合法的邮箱地址,绕过系统验证。例如,如果黑客输入的邮箱地址为“myemail”orI=I--”,密码为“myppass”,则SQL语句变为select count(*)from users wherer email='myemail' or I=I --" and password='mypass',这条语句执行后返回的记录数是users表中所有记录的总数,不是0,所以通过了系统的登录验证,系统允许它来登录。这就是著名的 SQL 注入攻击。造成这种后果的原因是黑客精心构造了一个字符串来替换合法的电子邮件地址,而系统没有检查用户输入的数据的有效性。
为了防止上述PHP安全漏洞,我们可以验证用户输入的合法性。这里需要的是电子邮件地址。为了检查用户输入数据的有效性,我们可以使用正则表达式来验证用户输入的电子邮件地址是否符合正确的电子邮件格式,这可以大大增加黑客设计特殊字符串的难度一定程度上防止了SQL注入漏洞的发生。
在任何情况下,如果对用户的输入进行了严格的验证,当然,验证方法根据不同情况而有所不同,并不限于正则表达式。这可用于防范安全漏洞。
2、未能正确转义系统的输出,导致安全漏洞及其防范
未能正确转义系统的输出也会造成安全漏洞。跨站点脚本漏洞就是一个众所周知的例子。假设有一个可以发表评论的系统,它使用表单提交数据。对于一般用户来说,这不会是什么大问题,但是对于黑客来说,问题就来了。因为黑客并不是真的想发表任何评论,可能是他想窃取其他登录用户的cookies。黑客为了窃取其他注册用户的cookies,可以提交javascript代码作为评论内容。
如果黑客提交的内容在输出前没有转义,其他用户的浏览器会执行lavascript代码,从而将浏览评论的其他登录用户的cookie信息发送给黑客为了防止上述跨站脚本漏洞攻击,我们需要采取的措施很简单:在将评论内容输出到客户端浏览器之前,使用htmlentities()函数对输出内容进行转义。该函数可以将输出内容中可能收录的html标签转换为html实体,使黑客输入的Javascript代码不会被执行。
在任何情况下,系统的输出都应该进行适当的转义(转义方法根据不同的情况而有所不同,并且不限于htmlentities()函数),以免让黑客利用它。