我知道它可能很愚蠢,但当我以表格显示时,如何逃避用户输入。我不是指任何输出,尤其是输入形式。例如,如果我有输入标记并将用户文本放在值中。
<input type="text" value="'test' "test" <script>alert('hacked');</script>" />
当我离开它时,它显示正确
'test' "test" <script>alert('hacked');</script>
没有XSS发生,但我感觉不安全因为其他代码最终会破坏。是否有类似于浏览器内置方法的东西,用于在将数据放入表单时阻止XSS,或者我遗漏了什么?
编辑:我没有说完整个故事。对于那个很抱歉。当我使用htmlentities
或htmlspecialchars
时,我会收到我不想要的转义数据。我在输入中看到了这一点,而不是输入的内容:(
'test' "test" <script>alert('hacked');</script>
我想阻止XSS并在不改变内容的情况下显示内容。在这种情况下是否可能。
答案 0 :(得分:2)
您应该对文本进行HTML编码,以便最终结果如下:
<input type="text" value="'test' "test" <script>alert('hacked');</script>" />
您应该使用服务器语言来执行此操作。在Javascript中没有内置的支持,所以你必须自己构建一个函数。
在ASP.NET MVC中,例如它可能如下所示:
<input type="text" value="<%= Server.HtmlEncode(Model.UserInput) %>" />
MVC 2还有<%: %>
标记,可自动对文本进行编码:
<input type="text" value="<%: Model.UserInput %>" />
在浏览器中检查页面的来源以查看结果。
您似乎要将文本转义两次,以便将"
转义为"
,然后转移到&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;
替换所有引号