代码之家  ›  专栏  ›  技术社区  ›  vtortola

什么使输入易受XSS攻击?

  •  7
  • vtortola  · 技术社区  · 16 年前

    我一直在阅读关于XSS的内容,我制作了一个简单的带有文本和提交输入的表单,但是当我执行 <script>alert();</script> 在它上面,什么都没有发生,服务器就得到了这个字符串。

    我该怎么做才能让它变得脆弱??(那我就知道我不该做什么了,呵呵)

    干杯。

    5 回复  |  直到 9 年前
        1
  •  20
  •   BalusC    13 年前

    实际上,只需让服务器输出它,这样输入字符串就可以有效地嵌入到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预防解决方案 htmlspecialchars() fn:escapeXml() 分别针对php和jsp。这些将取代其他 < , > " 通过 &lt; , &gt; &quot; 这样,最终用户输入就不会真正嵌入到HTML源代码中,而是在输入时显示出来。

        2
  •  20
  •   Quentin    16 年前

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

        3
  •  4
  •   Henri    16 年前

    你应该“注入”脚本。因此,如果您有一个文本输入,您应该将其放入表单中:

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

    这样,您首先关闭现有HTML的属性,然后插入自己的代码。这个想法是为了逃避引用。

        4
  •  2
  •   Annie    9 年前

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

        5
  •  1
  •   Troy Hunt    16 年前

    三件简单的事情:

    1. 如果您没有在某个时刻将不受信任的数据输出到页面,那么XSS就没有机会了。
    2. 所有未分类的数据(窗体、查询字符串、头等)都应该根据白名单进行验证,以确保它在可接受的范围内。
    3. 屏幕的所有输出都应该以适当的库(即.NET的Anti-XSS)结尾,并使用适当的语言(HTML、CSS、JS等)。

    有关更多信息,请参阅 OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS) .