PHP表单安全性及XSS攻击

先转载W3SCHOOL关于这一段的描述


表单的一段HTML代码如下:

">

当提交此表单时,通过method="post"发送表单数据。


什么是$_SERVER["PHP_SELF"]变量?

$_SERVER["PHP_SELF"]是一种超全局变量,它返回当前执行脚本的文件名。

因此,$_SERVER["PHP_SELF"]将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。


什么是htmlspecialchars()函数?

htmlspecialchars()函数把特殊字符转换为HTML实体。这意味着<和>之类的HTML字符会被替换为<和>。这样可防止攻击者通过在表单中注入HTML或JavaScript代码(跨站点脚本攻击)对代码进行利用。


关于PHP表单安全性的重要提示

$_SERVER["PHP_SELF"]变量能够被黑客利用!

如果您的页面使用了PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。

提示:跨站点脚本(Cross-site scripting,XSS)是一种计算机安全漏洞类型,常见于Web应用程序。XSS能够使攻击者向其他用户浏览的网页中输入客户端脚本。


PS:原本缩写应为CSS,与层叠样式表CSS缩写重名后才叫XSS,汗!

再PS:XSS攻击分为两种:非持久型攻击(Non-persistent XSS)和持久型攻击(Persistent XSS),非持久型攻击是一次性的,仅对当次的页面访问产生影响。而持久型攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。


假设我们的一张名为“test_form.php”的页面中有如下表单:

">
现在,如果用户进入的是地址栏中正常的URL:"http://www.example.com/test_form.php",上面的代码会转换为:

到目前,一切正常。

不过,如果用户在地址栏中键入了如下URL:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
在这种情况下,上面的代码会转换为:

这段代码加入了一段脚本和一个提示命令。并且当此页面加载后,就会执行JavaScript代码(用户会看到一个提示框)。这仅仅是一个关于PHP_SELF变量如何被利用的简单无害案例。

您应该意识到">
无法利用,没有危害!

通过PHP验证表单数据

我们要做的第一件事是通过PHP的htmlspecialchars()函数传递所有变量。

在我们使用htmlspecialchars()函数后,如果用户试图在文本字段中提交以下内容:

代码不会执行,因为会被保存为转义代码,就像这样:

<script>location.href('http://www.hacked.com')</script>

现在这条代码显示在页面上或e-mail中是安全的。

在用户提交该表单时,我们还要做两件事:

1.(通过PHP trim()函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)

2.(通过PHP stripslashes()函数)删除用户输入数据中的反斜杠(\)


实际编程测试发现浏览器并无反应,后来发现是因为Chrome浏览器会自动拦截简单的XSS脚本,并在console中给出错误提示,在IE8下测试后部分正常,有些似乎也会弹出提醒框提示发现XSS行为,没有做更进一步测试。















你可能感兴趣的:(PHP)