我一直在阅读有关XSS的内容,我创建了一个带有文本和提交输入的简单表单,但当我在其上执行<script>alert();</script>
时,没有任何反应,服务器获取该字符串,就是这样。
我需要做些什么才能让它变得脆弱? (然后我将学习我不应该做什么)
干杯。
答案 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()
。这些将替换<
,>
和"
<
,>
和"
,以便最终用户输入不会结束字面上嵌入在HTML源代码中,但只是在输入时显示。
答案 2 :(得分:4)
你应该“注入”脚本。因此,如果您有文本输入,则应该使用以下格式:
" /> <script>alert();</script>
这样您首先关闭现有HTML的属性,然后注入自己的代码。我们的想法是逃避报价。
答案 3 :(得分:2)
Google制作了一个非常棒的教程,涵盖了XSS和其他安全漏洞here。它可以帮助您了解在实际应用程序中如何利用这些问题。
答案 4 :(得分:1)
三件简单的事情:
OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS)中的示例更多信息。