Jquery 防止XSS攻击

Jquery 防止XSS攻击,jquery,asp.net,security,xss,Jquery,Asp.net,Security,Xss,我正在从事一个ASP.NETC#+jQueryAjax网站项目。我正在努力防止xss攻击,我知道下面不是完整的方法,但这至少是我应该做的——在接受用户的免费字符串输入时使用HtmlEncode)。我真的需要一个人来检查我是否做了正确的事情 假设我们有一个场景,其中一个页面控件是一个“Description”文本框,用户可以输入用于描述其产品的“free”字符串。为了防止获取xss攻击输入,在服务器端页面方法中,我使用HtmlUtility.HtmlEncode()包装了“Description”

我正在从事一个ASP.NETC#+jQueryAjax网站项目。我正在努力防止xss攻击,我知道下面不是完整的方法,但这至少是我应该做的——在接受用户的免费字符串输入时使用HtmlEncode)。我真的需要一个人来检查我是否做了正确的事情

假设我们有一个场景,其中一个页面控件是一个“Description”文本框,用户可以输入用于描述其产品的“free”字符串。为了防止获取xss攻击输入,在服务器端页面方法中,我使用
HtmlUtility.HtmlEncode()
包装了“Description”文本,因此字符串在进入数据库之前将被解释为纯文本,即
变为
script

接下来的部分是我所怀疑的——在返回给用户之前如何处理html编码的文本

当用户想要查看输入的描述文本时,网站会从数据库中检索并打印出来

对描述执行html解码以便用户不会看到那些wierd
字符符合逻辑吗?它会首先破坏使用HtmlEncode的目的吗?如果是的话,这是正确的jQuery行来解码并将文本打印回用户吗

$(“#txtDescription”).val($(this).html(obj.Description).text();


非常感谢

不要对进入数据库的文本进行编码。将其以原始、未过滤的形式存储。如果字符串输出到支持HTML的上下文中(例如输出到浏览器),则仅对HTML字符进行编码.

您需要记住处理的每个字符串的内容类型及其来源-无论是来自安全源还是不受信任的源,还需要知道在连接两个字符串时,这两个字符串都是相同内容类型和信任级别的字符串

我使用
HtmlUtility.HtmlEncode()
包装了“Description”文本,因此字符串在进入数据库之前将被解释为纯文本,即
变成
脚本

这里听起来像是说description字段是一个纯文本字符串,而数据库中存储的是一个安全HTML字符串(因为
HtmlEncode
的输出保证不包含危险代码)

这显示了对内容进行过早编码的第一个问题。如果您正在编写要发送到服务器的SQL字符串,则预编码为HTML并不能防止SQL注入。对于SQL,使用SQL prepared语句是克服这一问题的好方法,但预编码并不能使字符串在所有上下文中都是安全的

接下来的部分是我所怀疑的——在返回给用户之前如何处理html编码的文本

当用户想要查看输入的描述文本时,网站会从数据库中检索并打印出来

如果用户正在接收安全HTML,并且您有一个安全HTML字符串,您可以将其发送给用户

如果用户收到纯文本电子邮件,则需要将存储在数据库中的安全HTML转换为纯文本

如果用户正在接收RSS,则需要确保使用XML子字符串编写RSS


可以帮助您确保值在输出上正确编码。

< P> >使用HTTPUTILITY。HTMLNECODER是一个好主意。考虑阅读文档更清楚。您在AntiXSS库W.R.T输入编码中有更广泛的选择。它遵循一种更安全的基于白名单的方法。r您的答复:)。最好将文本以未过滤的原始形式保存到数据库中,但我的系统将要求在进入数据库之前进行包装,无论哪种方式,我不确定的是如何将其打印回用户我们应该向用户打印奇怪的字符,还是在打印前先解码字符是正常的做法?如果是,如何处理该部分?我需要将这些值打印回文本框,它会显示“scriptalert(';xss';)/script谢谢,如果有人告诉我为什么不应该将文本编码到数据库中,那么muchIt会很有帮助……特别是因为答案有5张赞成票(在页面上最多)。