我知道要防止XSS,我们需要了解情境。
当我们回显$ userinput;我们需要注意这样一个事实,即如果输入进入文本框值,或进入textarea值或进入分区html区域等等。
我想简化回声业务,以便我可以使用单个函数来满足我的大部分回声需求。考虑到这一点,我把以下功能放在一起,但我不确定,依靠它是否是一个好主意。
当然,我做了一些假设。 那就是我总是使用内置的urlencode作为网址。我虔诚地用“或”来界定属性。
考虑到这一点,我可以使用下面的safeecho而不是普通的回声来阻止XSS吗?
function safeecho($str)
{
return htmlentities($str, ENT_QUOTES, "UTF-8");
}
我不确定的是<Style>
上下文。我见过人们谈论样式表的“表达式”问题。我不知道如何解决这个问题。但由于我不打算在样式表或javascript中输出userinput,我并不担心这些事情!当我发现自己需要在js区域或样式表中输出userinput时,我不会使用此函数。但我仍然对你如何处理这些背景的评论感兴趣。但同样,我主要是担心常见的东西是html和表单对象。
底线问题是强制使用utf8和ent_quotes,我安全吗?
答案 0 :(得分:0)
htmlentities逃脱'。如果是这样,那应该是最好的。总是存在javascript:urls你需要处理的问题。并且还记得像onclick这样的html属性实际上是javascript,所以你的函数在那里没有任何效果。你将不得不做js逃避。请参阅OWASP xss预防备忘单。关于CSS,如果可以,请避免将用户数据放在那里。它需要基于白名单的键值验证方法。