你可能有一个脚本在HTML文本区/文本字段,并有它执行
Could you possibly have a script in an HTML textarea/textfield and have it executed?
有人提出一个观点,认为文本区接受太多字符可能会有风险,因为人们可能会在里面放脚本。
在我的一生中,我从未听说过那种可能性。有没有人能透露一些光,是否有可能有一个脚本在文本表单字段,并以某种方式有它执行?
是的-这就是XSS的工作原理。非常简单—您可以将脚本内容添加到dom并以这种方式执行它。例如,这会触发一个警告:
$('#myDiv').html('<script type="text/javascript">alert("hello world");</script>');
这里是一个提琴
任何时候处理use输入,都有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的攻击。
另一种常见的情况是将不安全的内容作为元素的属性。我在一个论坛上看到了一个这样的例子,开发人员出于某种原因将帖子的内容放在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>
所以你应该从这里得到什么:
- 在任何情况下都不要相信你的用户
- 绝不打印未经消毒或未经验证的用户输入
- 了解XSS技术以及如何阻止它们
- 知道什么时候你可能容易受到攻击,如果攻击者通过你的防御,你会怎么做
- 理解长度与安全无关。除非你将输入限制为3个字符,否则可能会有潜在的危险。
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用jquery将输入字段转换为文本
- 如何从查询字符串中的输入字段发回文本
- 表单输入字段随着溢出的文本而增长
- 使用单个文本框向多个字段添加严格搜索
- 使用javascript提交表单并从字段/单选框/复选框/文本区域获取数据
- 使用jQuery的输入字段文本换行
- 向使用jQuery加载DOM后添加的字段添加不受限制的文本输入DatePickers
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 如何根据文本长度立即显示和隐藏字段?-JQuery
- 当输入字段(文本框)有值时,选中/取消选中复选框
- 重置时输入字段文本css
- 将输入字段文本放入变量中并将其用于 jquery JSON get 请求
- 在 html 输入字段 (文本框) 中插入 javascript (jquery) 变量
- 搜索字段文本没有't在FF 3.6中显示
- 主干集合url操作与输入字段文本
- 如何大写输入字段文本的第一个字母,而键入javascript
- 如何使用angularjs在同一字段中键入时动态格式化输入字段文本
- 如何将输入字段(文本框)添加到使用jQuery动态创建的表中