当前位置:  开发笔记 > 编程语言 > 正文

什么是阻止网站进行xss攻击的好方法

如何解决《什么是阻止网站进行xss攻击的好方法》经验,为你挑选了1个好方法。

我正在使用asp.net 4.0的C#web表单.该网站需要安全,现在正在进行安全审计.我只是想知道需要做些什么来最好地防止XSS攻击到我的网站.

我知道有可用于网站输出的编码.我也从微软看过antixsslibrary.dll,但这似乎已经过时了.asp.net是否有内置的xss攻击预防?我认为它确实存在,因为我试图在我自己的网站上创建和xss攻击,我得到错误:

'/ GNB.DPS.MVAD.Presentation.Web'应用程序中的服务器错误.

从客户端检测到一个潜在危险的Request.Form值(ctl00 $ cphListBody $ tbXSS ="alert('XSS V ...").描述:请求验证检测到潜在危险的客户端输入值,并且请求的处理已经该值可能表示试图破坏应用程序的安全性,例如跨站点脚本攻击.要允许页面覆盖应用程序请求验证设置,请将httpRuntime配置部分中的requestValidationMode属性设置为requestValidationMode ="2.0 ".示例:.设置此值后,您可以通过在Page指令或配置部分中设置validateRequest ="false"来禁用请求验证.但是,强烈建议您的应用程序在这种情况下显式检查所有输入.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=153133.

异常详细信息:System.Web.HttpRequestValidationException:从客户端检测到潜在危险的Request.Form值(ctl00 $ cphListBody $ tbXSS ="alert('XSS V ...").

David.. 5

ASP.NET提供了一些工具,可以防御XSS攻击,但不能自动防御.您需要知道攻击是什么,以及如何使用这些工具来抵御攻击.

您显示的错误是一个默认设置,它会在进入Web应用程序时尝试阻止错误的用户输入.这是一个很好的一步,但如果给你一种虚假的安全感,不要放过.还有其他方法可能导致错误的输入进入您的数据,从而使您的网站容易受到攻击.

例如,假设您的网站由用户数据驱动.您编写的数据输入屏幕可能会阻止"有潜在危险的内容",但没有什么可以阻止某人使用其他界面输入数据 - 他们自己的界面,SQL Server Management Studio等.如果他们在那里得到不好的脚本,您的网站将愉快地将这些危险的脚本呈现给用户.

防止XSS的唯一方法是在将数据输出到浏览器时清理数据,而不是在它进入时.

最基本的方法是使用内置的Server.HtmlEncode()函数来清除来自不受信任来源的所有字符串.(不受信任意味着除了您自己硬编码的字符串之外的其他内容.数据库,文件和Web服务不是可靠的来源.)

Server.HtmnlEncode可以做什么有限制.我个人喜欢使用Microsoft Anti-Xss库,因为它做得更好(白名单与黑名单过滤)并提供更多功能(如GetSafehtmlFragment()).

网上有大量资源.我从这里开始:

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

然后专门针对.NET:

http://msdn.microsoft.com/en-us/library/aa973813.aspx

编辑 - 添加

这里的主要问题似乎是对输入过滤和输出过滤之间差异的误解.这篇文章很好地解释了差异,并且比我在这里使用得更好:

http://jeremiahgrossman.blogspot.com/2007/01/input-validation-or-output-filtering.html

最后编辑,然后我会停止.

甚至微软也承认我上面所说的话.请参阅此文章:http://msdn.microsoft.com/en-us/library/ms998274.aspx

来自文章:

不要依赖输入消毒

通常的做法是使代码尝试通过过滤掉已知的不安全字符来清理输入.不要依赖这种方法,因为恶意用户通常可以找到绕过验证的替代方法.相反,您的代码应该检查已知的安全,安全的输入.表1显示了表示一些常见字符的各种安全方法.

输入validaiton是你的防御武器库中的一个工具,但仅凭它还不够.



1> David..:

ASP.NET提供了一些工具,可以防御XSS攻击,但不能自动防御.您需要知道攻击是什么,以及如何使用这些工具来抵御攻击.

您显示的错误是一个默认设置,它会在进入Web应用程序时尝试阻止错误的用户输入.这是一个很好的一步,但如果给你一种虚假的安全感,不要放过.还有其他方法可能导致错误的输入进入您的数据,从而使您的网站容易受到攻击.

例如,假设您的网站由用户数据驱动.您编写的数据输入屏幕可能会阻止"有潜在危险的内容",但没有什么可以阻止某人使用其他界面输入数据 - 他们自己的界面,SQL Server Management Studio等.如果他们在那里得到不好的脚本,您的网站将愉快地将这些危险的脚本呈现给用户.

防止XSS的唯一方法是在将数据输出到浏览器时清理数据,而不是在它进入时.

最基本的方法是使用内置的Server.HtmlEncode()函数来清除来自不受信任来源的所有字符串.(不受信任意味着除了您自己硬编码的字符串之外的其他内容.数据库,文件和Web服务不是可靠的来源.)

Server.HtmnlEncode可以做什么有限制.我个人喜欢使用Microsoft Anti-Xss库,因为它做得更好(白名单与黑名单过滤)并提供更多功能(如GetSafehtmlFragment()).

网上有大量资源.我从这里开始:

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

然后专门针对.NET:

http://msdn.microsoft.com/en-us/library/aa973813.aspx

编辑 - 添加

这里的主要问题似乎是对输入过滤和输出过滤之间差异的误解.这篇文章很好地解释了差异,并且比我在这里使用得更好:

http://jeremiahgrossman.blogspot.com/2007/01/input-validation-or-output-filtering.html

最后编辑,然后我会停止.

甚至微软也承认我上面所说的话.请参阅此文章:http://msdn.microsoft.com/en-us/library/ms998274.aspx

来自文章:

不要依赖输入消毒

通常的做法是使代码尝试通过过滤掉已知的不安全字符来清理输入.不要依赖这种方法,因为恶意用户通常可以找到绕过验证的替代方法.相反,您的代码应该检查已知的安全,安全的输入.表1显示了表示一些常见字符的各种安全方法.

输入validaiton是你的防御武器库中的一个工具,但仅凭它还不够.


关键是你必须在向用户提供OUT时必须对数据进行处理,除了过滤输入,因为它是来自用户的IN.它们是两个不同的信任边界,你需要同时保护它们.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有