100分求教如何阻止XSS跨站脚本攻击

yaotomo 2018-01-13 09:06:22
如果每个页面的请求都判断用户输入有没有包含恶意脚本是不合理的
在网上搜索了一些解决方案,有的说asp.net mvc的话,可以用filter实现对非法请求的过滤
我用的是webform,是不是有类似的解决方案,比如在global.asax中写代码实现?应该在哪个事件中写,怎么写呢?
要用正则表达式把请求中所有<script>标签都去除吗?代码应该怎么实现呢?
我想实现用户提交的输入中包含恶意脚本,或者擅自修改URL插入恶意脚本的情况下,网站给出提示或跳转到一个错误页面。
暂时不考虑允许用户输入脚本的情况(比如允许原样显示源代码)
请各位高手帮帮小弟,这个问题困扰好几天了,谢谢!
...全文
1162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
MVC为啥要有Html.Raw这个方法?你只要不用这个方法来输出字符串,那MVC天生已经防xss了
  • 打赏
  • 举报
回复
在持久化层上做urlencode即可,没有这么麻烦的。
拜一刀 2018-01-15
  • 打赏
  • 举报
回复
修复方案 方案一 目前,云盾的“DDoS高防IP服务”以及“Web应用防火墙”均提供对Web应用攻击的安全防护能力。选择以上服务开通Web应用攻击防护,可以保障您的服务器安全。 方案二 将用户所提供的内容输入输出进行过滤。可以运用下面这些函数对出现XSS漏洞的参数进行过滤: PHP的htmlentities()或是htmlspecialchars() Python的cgi.escape() ASP的Server.HTMLEncode() ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library Java的xssprotect(Open Source Library) Node.js的node-validator 方案三 使用开源的漏洞修复插件。(需要系统管理员懂得编程并且能够修改服务器代码。)
秋的红果实 2018-01-14
  • 打赏
  • 举报
回复
引用 6 楼 han182100 的回复:
凭什么不让人家往数据库里保存单引号、分号、select 等等词儿?
当然可以 我说的是要“过滤”到这些标签,发现这些标签,然后做处理,例如<script>,转义成<script>,这样将来在页面上显示的时候,用户在浏览器看到的仍是<script>
han182100 2018-01-14
  • 打赏
  • 举报
回复
凭什么不让人家往数据库里保存单引号、分号、select 等等词儿?
秋的红果实 2018-01-14
  • 打赏
  • 举报
回复
只要有用户输入的地方,都要进行检查,每个页面的每个输入的地方,都要检查 脚本标签,如<script>,还是要过滤的 --------------------------\0
  • 打赏
  • 举报
回复
比如说,一个文本框的内容就是用来跟将来输出的 html 拼接在一起的,那么你在拼接文本框的时候才应该检查一下其中有没有非法的脚本。而其它各种文本框,你过滤、认定人家输入“非法”干什么呢?显然那是不知道该如何编程设计、想抄一个自己身边某些人最感觉的说法,而不是深入的技术解决。
  • 打赏
  • 举报
回复
比如说有些人在 sql 编程时纠结于过滤用户录入的单引号、分号、select 等字眼儿,这种就是纯粹是很坑的说法。产生 sql 语句本来就不能随便胡乱拼接字符串,例如 t-sql 语法要求对于字符串串常量需要将单引号替换为两个单引号,对于数字、日期等等都要先将字符串 parse 为相应类型的数值然后再拼接相关的 ToString 字符串。只要是正常地进行编程、合乎 sql 编程规范,那么还过滤什么符号?凭什么不让人家往数据库里保存单引号、分号、select 等等词儿? 对于其它文本录入也是如此。真正专业的开发人员是先懂的到底有什么危害,然后才正确地去在合适的地方去编程处理。那种盲目过滤用户录入、不让用户录入他所需要的文字的,这种网络博客似是而非的说法坑爹死了。
  • 打赏
  • 举报
回复
浏览器端假设有一个文本框,凭什么里边就不能写上
<script>
之类的文字?谁说只要提交信息里边有类似这种东西就算是“XSS”?基本上这个问题可以判断为在不该多余判断的地方纠结代码,那么在应该正确编程的真正的地方很可能就写错了编程方式。既然你没有具体深入到实际的“攻击”的地方,而只是纠结于提交的信息有没有匹配几个单词儿,那么这个也就不是真正的比较专业的程序员在处理所谓“攻击”时应该进行解决的编程的问题,无法回答了。
yaotomo 2018-01-13
  • 打赏
  • 举报
回复
web.config中的validateRequest我没有设置,默认就是true的。 另外HtmlEncode,网站全局实现过滤怎么做?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧