以正确的方式预防XSS

时间:2012-03-24 21:30:35

标签: utf-8 xss echo

我知道要防止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,我安全吗?

1 个答案:

答案 0 :(得分:0)

htmlentities逃脱'。如果是这样,那应该是最好的。总是存在javascript:urls你需要处理的问题。并且还记得像onclick这样的html属性实际上是javascript,所以你的函数在那里没有任何效果。你将不得不做js逃避。请参阅OWASP xss预防备忘单。关于CSS,如果可以,请避免将用户数据放在那里。它需要基于白名单的键值验证方法。