是什么让输入易受XSS攻击?

时间:2010-05-25 15:04:21

标签: javascript html security xss

我一直在阅读有关XSS的内容,我创建了一个带有文本和提交输入的简单表单,但当我在其上执行<script>alert();</script>时,没有任何反应,服务器获取该字符串,就是这样。

我需要做些什么才能让它变得脆弱? (然后我将学习我不应该做什么)

干杯。

5 个答案:

答案 0 :(得分:20)

让服务器将输入输出回客户端。

答案 1 :(得分:20)

确实让服务器输出它,以便输入字符串有效地嵌入到HTML源代码中,然后返回给客户端。

PHP示例:

<!doctype html>
<html lang="en">
    <head><title>XSS test</title></head>
    <body>
        <form><input type="text" name="xss"><input type="submit"></form>
        <p>Result: <?= $_GET['xss'] ?></p>
    </body>
</html>

JSP示例:

<!doctype html>
<html lang="en">
    <head><title>XSS test</title></head>
    <body>
        <form><input type="text" name="xss"><input type="submit"></form>
        <p>Result: ${param.xss}</p>
    </body>
</html>

或者,您可以重新显示输入元素中的值,这也经常出现:

<input type="text" name="xss" value="<?= $_GET['xss'] ?>">

RESP。

<input type="text" name="xss" value="${param.xss}">

这样“奇怪”的攻击字符串就像"/><script>alert('xss')</script><br class="一样可以工作,因为服务器会将其渲染为

<input type="text" name="xss" value=""/><script>alert('xss')</script><br class="">

XSS-prevention解决方案分别是PHP和JSP的htmlspecialchars()fn:escapeXml()。这些将替换<>" &lt;&gt;&quot;,以便最终用户输入不会结束字面上嵌入在HTML源代码中,但只是在输入时显示。

答案 2 :(得分:4)

你应该“注入”脚本。因此,如果您有文本输入,则应该使用以下格式:

" /> <script>alert();</script>

这样您首先关闭现有HTML的属性,然后注入自己的代码。我们的想法是逃避报价。

答案 3 :(得分:2)

Google制作了一个非常棒的教程,涵盖了XSS和其他安全漏洞here。它可以帮助您了解在实际应用程序中如何利用这些问题。

答案 4 :(得分:1)

三件简单的事情:

  1. 如果您在某些时候没有向页面输出不受信任的数据,则无法获得XSS
  2. 所有不受限制的数据(表单,查询字符串,标题等)都应针对白名单进行验证,以确保其在可接受的范围内
  3. 所有输出到屏幕的输出都应该用相应的库(即Anti-XSS for .NET)编码到适当的语言(HTML,CSS,JS等)上。
  4. OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS)中的示例更多信息。