PHP表单中需引起注重的地方?
S
E
R
V
E
R
[
"
P
H
P
S
E
L
F
"
]
变
量
有
可
能
会
被
黑
客
使
用
!
当
黑
客
使
用
跨
网
站
脚
本
的
H
T
T
P
链
接
来
攻
击
时
,
_SERVER["PHP_SELF"] 变量有可能会被黑客使用! 当黑客使用跨网站脚本的HTTP链接来攻击时,
SERVER["PHPSELF"]变量有可能会被黑客使用!当黑客使用跨网站脚本的HTTP链接来攻击时,_SERVER[“PHP_SELF”]服务器变量也会被植入脚本。原因就是跨网站脚本是附在执行文件的路径后面的,因此$_SERVER[“PHP_SELF”]的字符串就会包含HTTP链接后面的JavaScript程序代码。
XSS又叫 CSS (Cross-Site Script) ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
指定以下表单文件名为 “test_form.php”:
如何避免 $_SERVER[“PHP_SELF”] 被利用?
$_SERVER[“PHP_SELF”] 可以通过 htmlspecialchars() 函数来避免被利用。
form 代码如下所示:
使用 PHP 验证表单数据
首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。
当我们使用 htmlspecialchars() 函数时,在用户尝试提交以下文本域:
该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:
<script>location.href(‘https://www.ninexin.com’)</script>
以上代码是安全的,可以正常在页面显示或者插入邮件中。
当用户提交表单时,我们将做以下两件事情:
使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
使用PHP stripslashes()函数去除用户输入数据中的反斜杠 ()
接下来让我们将这些过滤的函数写在一个我们自己定义的函数中,这样可以大大提高代码的复用性。
将函数命名为 test_input()。
现在,我们可以通过test_input()函数来检测 $_POST 中的所有变量, 脚本代码如下所示:
实例