2012-04-11 57 views
0

我有这样的代码呼应的是,刚刚登录的用户的用户名:输出会议之后,用户输入 - 防止XSS

echo $_SESSION['user']['username']." 

我会就在想,如果我改变我的代码到:

echo htmlspecialchars $_SESSION['user']['username']." 

我正在保护自己从低级别的XSS至少?

+3

为什么你首先允许支持XSS的字符进入你的用户名? – Amber 2012-04-11 22:17:54

回答

1

默认情况下,函数htmlspecialchars不会对单引号(')进行编码,如果您的用户名在HTML属性中或javascript内部回显,则会出现XSS!

例如:

<script> 
name='$YOUR_NAME_HERE$'; 
</script> 

我们可以设置用户名 ';警报(' XSS'); // 因此,浏览器将生成的HTML内容是这样

<script> 
name='';alert('xss');//'; 
</script> 

我对你的建议是:

echo htmlspecialchars($_SESSION['user']['username'], ENT_QUOTES); 
3

这取决于您输出用户名的位置。如果它在html标签之间,是的。如果它在html属性中,则取决于属性。请参阅OWASP XSS预防备忘单。