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

vto*_*ola 7 html javascript security xss

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

我该怎么办才能让它变得脆弱?(然后我会学到我不应该做的事情)

干杯.

Que*_*tin 21

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

  • 我读到"让服务器将输入输出回客户端.",并且哇,这是这个问题最简单,最直接的答案. (2认同)

Bal*_*usC 21

实际上,只需让服务器输出它,以便输入字符串有效地嵌入到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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

<input type="text" name="xss" value="<?= $_GET['xss'] ?>">
Run Code Online (Sandbox Code Playgroud)

RESP.

<input type="text" name="xss" value="${param.xss}">
Run Code Online (Sandbox Code Playgroud)

这样"怪异"的攻击字符串"/><script>alert('xss')</script><br class="会起作用,因为服务器会将其渲染为

<input type="text" name="xss" value=""/><script>alert('xss')</script><br class="">
Run Code Online (Sandbox Code Playgroud)

XSS预防解决方案等htmlspecialchars(),并fn:escapeXml()分别对PHP和JSP.这些将在其他替代<,>"通过&lt;,&gt;&quot;让终端用户输入不落得字面嵌入在HTML源代码,而是刚刚显示有人进来.