String.stipTags()是否足以缓解XSS攻击?

时间:2009-05-24 19:03:06

标签: javascript xss

我正在创建这个UTF-8编码的HTML页面,用户可以在其中提供输入。我想做这个XSS证明。我遇到了这个名为Prototype的免费Javascript框架,它提供了一些有用的功能。一个特定的函数stripTags实际上剥离了输入字符串中的所有标记。 以下输入处理是否会阻止XSS?

  1. 对输入执行彻底的UTF-8解码(考虑所有可能的UTF-8表示)
  2. 将HTML字符实体转换为字符
  3. 在已解码的已转换字符串上运行stripTags以删除所有可能的标记
  4. Javascript中反xSS尝试的一个常见评论是用户可以绕过系统。这怎么可能?就我而言,使用该系统的用户值得信赖。但是,之前可能使用过同一台计算机的其他用户可能是恶意的。

2 个答案:

答案 0 :(得分:3)

您只需要更改:

  • &&
  • <&lt;
  • "&quot;(如果您在属性中使用单引号,也'&#39;

如果你已经转义了特殊的HTML字符,那么那里没有标签,而条带标签也没有做任何事情。

如果使用转义标记而不是转义,则外部输入将能够转义HTML属性,例如:

<input value="$foo">

如果$foo是:

" src="404" onerror="evil()

如果您想在JavaScript中插入不受信任的内容(在<script>内),则适用其他规则:

  • HTML实体未在<script>中解释,因此请勿在那里使用它们进行转义。
  • 使用JavaScript字符串转义规则(\\\"\"替换所有</的出现与<\/

答案 1 :(得分:0)

如果javascript框架在提供输入的机器上运行,那么这是不安全的(您将信任来自潜在恶意客户端的内容。

如果您在显示数据之前在客户端计算机上运行它,则取决于代码中的其他漏洞。

一个好的经验法则是安全约束通常应用于服务器端,用户不能简单地绕过它们。根据我的记忆,PHP有一个strip标签功能,并且在Apaches StringEscapeUtils for java中有类似的功能。我确信在.net

中有类似的东西