jQuery Prepend Security

jQuery Prepend Security

本文关键字:Security Prepend jQuery      更新时间:2024-04-15

这里有一个新手问题,如果我有一个文本区域没有提交。。。

 <form onsubmit="return false;">
      <textarea name="new_title_text" id="new_title_text"></textarea>
 </form>

我使用jQuery将文本区域的值预先设置为div…

var textValue = $('#new_title_text').val()
$('#myDiv').prepend('<div>' + textValue + '</div>');

这有什么安全漏洞吗?有人能以某种方式注入JavaScript并预制XSS、CSRF或任何其他类型的攻击吗?我知道,一旦我将值提交到服务器,就需要对其进行检查,但在提交之前会发生什么吗?

提前感谢!

基本上,你不能相信客户端完成的任何验证,因为人们可以(非常容易)绕过JavaScript验证。

在服务器上进行适当的验证和卫生处理,将客户端验证留给用户体验,不要用明显无效的数据"打扰"服务器,比如需要值的空字段。


除非你让你的用户提交一些PHP代码或JavaSctipt代码在你的网站上的其他地方执行,否则你应该是安全的。请始终记住NOT要信任来自用户的任何数据。将所有传入的数据视为潜在威胁,并在以后计划使用时对处理过的任何数据进行消毒。

有人能以某种方式注入JavaScript并预制XSS、CSRF或任何其他类型的攻击吗

是的。您在没有HTML转义的情况下将文本注入HTML字符串,因此该字符串中的任何元字符(<&)都将失败,并且可能容易受到注入攻击(例如<script>...)。

问题是那个人是谁?从您当前的代码来看,外部方似乎不可能预先填充文本区域,因此必须是用户在攻击自己(而不是真正的漏洞)。

因此,您要么需要对进入HTML的字符串进行HTML转义,要么更好地使用DOM风格的访问方法,如.text().attr()来设置文本内容和属性,而不使用粗略的字符串标记生成。或者创建简写:

$('#myDiv').prepend(
    $('<div>', {text: $('#new_title_text').val()})
);

基本思想是,对不受信任的数据使用前缀是不安全的。然而,可利用性确实取决于场景。如果攻击者能够创建一个url,使该脚本使用不受信任的值运行,那么您肯定存在XSS问题。然而,如果用户只能通过输入不安全的数据并单击按钮来触发此操作,则会更安全,但并不完全安全。这通常被称为self-xss,有时与点击劫持等一起被利用。

有关不安全jquery函数的更多信息,请参阅:http://erlend.oftedal.no/blog/?blogid=127