如何逃避形式上的不安全内容以防止XSS?

时间:2011-06-17 15:29:23

标签: php html forms escaping xss

我知道它可能很愚蠢,但当我以表格显示时,如何逃避用户输入。我不是指任何输出,尤其是输入形式。例如,如果我有输入标记并将用户文本放在值中。

<input type="text" value="'test' "test" <script>alert('hacked');</script>" />

当我离开它时,它显示正确

'test' "test" <script>alert('hacked');</script>

没有XSS发生,但我感觉不安全因为其他代码最终会破坏。是否有类似于浏览器内置方法的东西,用于在将数据放入表单时阻止XSS,或者我遗漏了什么?

编辑:我没有说完整个故事。对于那个很抱歉。当我使用htmlentitieshtmlspecialchars时,我会收到我不想要的转义数据。我在输入中看到了这一点,而不是输入的内容:(

'test' &quot;test&quot; &lt;script&gt;alert('hacked');&lt;/script&gt;

我想阻止XSS并在不改变内容的情况下显示内容。在这种情况下是否可能。enter image description here

4 个答案:

答案 0 :(得分:2)

您应该对文本进行HTML编码,以便最终结果如下:

<input type="text" value="'test' &quot;test&quot; &lt;script&gt;alert('hacked');&lt;/script&gt;" />

您应该使用服务器语言来执行此操作。在Javascript中没有内置的支持,所以你必须自己构建一个函数。

在ASP.NET MVC中,例如它可能如下所示:

<input type="text" value="<%= Server.HtmlEncode(Model.UserInput) %>" />

MVC 2还有<%: %>标记,可自动对文本进行编码:

<input type="text" value="<%: Model.UserInput %>" />

编辑:

在浏览器中检查页面的来源以查看结果。

您似乎要将文本转义两次,以便将"转义为&quot;,然后转移到&amp;quot;

答案 1 :(得分:1)

在PHP中,使用htmlspecialchars()来转义任何GET或POST内容中的XSS字符(例如,如果您的数据被称为$_POST['data'],请将其转义为:$variable = htmlspecialchars($_POST['data']);)。此外,如果您使用数据库,请使用addslashes()来转义引号和撇号。

希望这有帮助。

答案 2 :(得分:0)

您如何设置用户文字?如果您有控制权,则从服务器端,所有语言都支持在浏览器上呈现输出之前对输出进行编码。

只要您清理输出即可。您基本上可以允许用户输入他们想要的任何内容。然后在显示内容时,您只需对其进行编码,以便浏览器不会执行它。这可以通过任何语言PHP,JScript,ASP,VB,C#等来完成......

答案 3 :(得分:0)

由于引号用于突破输入属性,只需用&amp; quot;

替换所有引号