use*_*182 5 asp.net security xss jquery
我正在开发一个ASP.Net C#+ jQuery ajax网站项目.我试图阻止xss攻击,我知道下面不是完整的方法,但这至少是我应该做的 - 在接受用户的免费字符串输入时使用HtmlEncode).我真的有人要检查我是否正在做正确的事情.
因此,假设我们有一个场景,其中一个页面控件是"描述"文本框,用户可以输入用于描述其产品的"免费"字符串.为了防止获取xss攻击输入,在服务器端页面方法,我使用了包装"描述"文本HtmlUtility.HtmlEncode(),因此字符串将在进入数据库之前被解释为纯文本,即<script>变为>script<.
接下来的部分是我有疑问的 - 如何处理html编码的文本,然后再将其返回给用户?
当用户想要查看输入的描述文本时,从数据库中检索网站并将其打印出来.
在描述上执行html解码是否合乎逻辑,以便用户不会看到那些奇怪的><字符?它首先会破坏使用HtmlEncode的目的吗?如果是的话,这是正确的jQuery行解码并将文本打印回用户???
$("#txtDescription").val($(this).html(obj.Description).text();
非常非常感谢你
您需要记住您处理的每个字符串的内容类型以及它的来源 - 无论是来自安全源还是不受信任的源,并且还知道在连接两个字符串时这两个字符串都是具有相同内容类型和信任的字符串-等级。
我使用 包装了“描述”文本
HtmlUtility.HtmlEncode(),因此该字符串在进入数据库之前将被解释为纯文本,即<script>变为>script<。
在这里,听起来您好像在说描述字段是一串纯文本,而您在数据库中存储的内容是一串安全的 HTML(因为 的HtmlEncode输出保证不包含危险代码)。
这显示了过早编码内容的第一个问题。如果您正在编写要发送到服务器的 SQL 字符串,则预编码为 HTML 并不能保护您免受 SQL 注入。使用 SQL 准备语句是解决 SQL 问题的好方法,但预编码并不能保证字符串在所有上下文中都是安全的。
接下来的部分是我有疑问的 - 如何在将 html 编码文本返回给用户之前处理它?
当用户想要查看输入的描述文本时,网站会从数据库中检索并将其打印出来。
如果用户正在接收安全 HTML,并且您有一个安全 HTML 字符串,则可以将其发送给用户。
如果用户收到纯文本电子邮件,则需要将数据库中存储的安全 HTML 转换为纯文本。
如果用户正在接收 RSS,那么您需要确保使用 XML 子字符串编写 RSS。
上下文自动转义可以帮助您确保值在输出上正确编码。