有人提出一个论点,即拥有一个接受太多字符的textarea可能会有风险,因为人们可能会把脚本放在那里。
在我的整个存在中,我从未听说过这种可能性。 任何人都可以了解是否可以在文本表单字段中创建脚本并以某种方式执行它?
答案 0 :(得分:3)
是的 - 这就是XSS的工作原理。非常简单 - 您可以将脚本内容添加到dom并以此方式执行。例如,这会触发警报:
$('#myDiv').html('<script type="text/javascript">alert("hello world");</script>');
答案 1 :(得分:1)
每当您处理使用输入时,您都会面临XSS漏洞的风险。
我们假设您有一个简单的HTML表单:
<form action="submit.php" method="post">
<textarea name="insecuretext"></textarea>
</form>
然后在你的服务器上你有这样的东西:
<div class="usercontent">
<?php echo $_POST["insecuretext"]; ?>
</div>
对于99%的用户来说,这样可以完美运行,但是如果有人提交了这个呢?
<script>somethingEvil();</script>
您的HTML将如下所示:
<div class="usercontent">
<script>somethingEvil();</script>
</div>
然后,任何查看该页面的人都会受到JavaScript的影响。
一个非常简单的解决方案是通过调用strip_tags()
<div class="usercontent">
<?php echo strip_tags($_POST["insecuretext"]); ?>
</div>
现在,除非您的攻击者非常聪明,否则在这种情况下您不会受到XSS的攻击。</ p>
另一种常见情况是,如果您将不安全的内容作为元素的属性。我在论坛上看到了一个这样的例子,开发人员出于某种原因将帖子的内容放在data-content
属性中。
<div class="forum_post" data-content="<?php echo $_POST["insecuretext"]; ?>"></div>
我能够通过提交类似的内容来解决这个问题:
foo" onload="somethingEvil();"> <!--
打印出<div class="forum_post" data-content="foo" onload="somethingEvil();"> <!-- ></div>
在这种情况下,所有需要做的就是将我的特殊字符转换为实体:
<div class="forum_post" data-content="<?php echo htmlentities($_POST["insecuretext"]); ?>"></div>
看起来像这样:
<div class="forum_post" data-content="foo" onload="somethingEvil();"> <!-- "></div>
所以你应该从中得到什么: