跟随此处:http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL
我不太明白这里的意图(我的代码使用了上面引用的教程的一部分):
// XSS protection to avoid printing the value
/* Developer's Note: Not actually sure what the purpose of this is, or how it protects. */
$id = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $id);
$uname = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $uname);
我想我只是不理解reg ex,但我的猜测是我们正在消除任何不合理的字母数字字符,并且这样做,我们至少限制了传统JS标签的有效性。
答案 0 :(得分:0)
正确的正则表达式的目的是正确的。它正在删除任何不是字母数字,下划线或短划线的字符(-
)。
这足以防范XSS,因为大多数攻击都依赖于注入或存储任意JavaScript字符串,并且该字符集对于存储任何有效的XSS而言太有限了。
注意:我说你的正则表达式就足够了。不一定是preg_replace
自己。
答案 1 :(得分:0)
正则表达式只允许使用字母数字字符,下划线和短划线。
我假设$uname
和$id
是来自POST,GET或COOKIE变量的用户输入。因此,如果要打印这些变量,这可以保护您免受XSS的攻击。如果用户要将一个脚本(例如<script>...</script>
)注入变量,它会将其剥离到script...script
,这将保护输出免受任何恶意注入。