www.hackdig.com Open in urlscan Pro
39.107.13.245  Public Scan

URL: http://www.hackdig.com/?10/hack-6421.htm
Submission: On June 13 via manual from US — Scanned from DE

Form analysis 1 forms found in the DOM

POST http://www.hackdig.com/api.php

<form action="http://www.hackdig.com/api.php" method="post" id="commentform" onsubmit="return subcmt();">
  <div class="alignleft">
    <p>
      <small>姓名: </small>
      <label><input type="text" name="name" id="name" size="25" tabindex="1"></label>
    </p>
    <p>
      <small>邮箱: </small>
      <label><input type="text" name="emails" id="emails" size="25" tabindex="2"></label>
    </p>
    <p>
      <small>网址:</small>
      <label><input type="text" name="websites" id="websites" size="25" tabindex="3"></label>
    </p>
    <p>
      <small>验证码:</small>
      <label id="antiarea">93减<input type="text" name="antirbt" id="antirbt" size="4" tabindex="4">加76是13</label>
    </p>
    <p>
      <label> <input type="hidden" name="article_id" id="article_id" value="6421">
        <input type="hidden" name="ctrl" id="ctrl" value="save">
        <input type="hidden" name="action" id="action" value="comment"></label>
    </p>
    <p><label><textarea name="comment" id="comment" tabindex="5"></textarea>
        <input name="submit" type="submit" class="corner" id="submit" tabindex="6" value="提交评论"></label>
    </p>
  </div>
</form>

Text Content

分享到

 * 一键分享
 * QQ空间
 * 新浪微博
 * 百度云收藏
 * 人人网
 * 腾讯微博
 * 百度相册
 * 开心网
 * 腾讯朋友
 * 百度贴吧
 * 豆瓣网
 * 搜狐微博
 * 百度新首页
 * QQ好友
 * 和讯微博
 * 更多...

百度分享

记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华
首页 网络安全 移动安全 招聘信息 黑客关键词 海外英文版

«学校网络中心OA管理平台SQL注入检测及修复...
逆向工程友讯科技(D-Link)路由器固件后... »



ASP.NET脚本过滤-防止跨站脚本(XSS)攻击

语音阅读2013-10-15 12:15
ASP.Net
1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个
HttpRequestValidationExceptioin。
 
默认情况下会返回如下文字的页面: 
 


Server Error in '/YourApplicationPath' Application

A potentially dangerous Request.Form value was detected from the client
(txtName="<script>alert("XSS");</script>").

Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. You can disable request validation by setting validateRequest=false in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.

Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (txtName="<script>alert("XSS");</script>").

.... 


 

 
 
这是ASP.Net提供的一个很重要的安全特性。因为很多程序员对安全没有概念,甚至都不知道XSS这种攻击的存在,知道主动去防护的就更少了。ASP.Net在这一点上做到默认安全。这样让对安全不是很了解的程序员依旧可以写出有一定安全防护能力的网站。
 
但是,当我Google搜索 HttpRequestValidationException 或者 "A potentially dangerous
Request.Form value was detected from the
client"的时候,惊奇的发现大部分人给出的解决方案竟然是在ASP.Net页面描述中通过设置 validateRequest=false
来禁用这个特性,而不去关心那个程序员的网站是否真的不需要这个特性。看得我这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里,不管你对安全的概念了解多少,一个主动的意识在脑子里,你的站点就会安全很多。
 
为什么很多程序员想要禁止 validateRequest
呢?有一部分是真的需要用户输入"<>"之类的字符。这就不必说了。还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报错,自己来处理报错。
 
对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要使用validateRequest=false。
 
正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。
 
举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:
 


protected void Page_Error(object sender, EventArgs e)
{
     Exception ex = Server.GetLastError();
    if (ex is HttpRequestValidationException)
    {
         Response.Write("请您输入合法字符串。");
         Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
     }
}

 

这样这个程序就可以截获 HttpRequestValidationException 异常,而且可以按照程序员的意愿返回一个合理的报错信息。
 
这段代码很简单,所以我希望所有不是真的要允许用户输入<xxx>之类字符的朋友,千万不要随意的禁止这个安全特性,如果只是需要异常处理,那么请用类似于上面的代码来处理即可。
 
而对于那些通过 明确禁止了这个特性的程序员,自己一定要明白自己在做什么,而且一定要自己手动的检查必须过滤的字符串,否则你的站点很容易引发跨站脚本攻击。
 
关于存在Rich Text Editor的页面应该如何处理?
 
如果页面有富文本编辑器的控件的,那么必然会导致有<xxx>类的HTML标签提交回来。在这种情况下,我们不得不将validateRequest="false"。那么安全性怎么处理?如何在这种情况下最大限度的预防跨站脚本攻击呢?
 
根据微软的建议,我们应该采取安全上称为“默认禁止,显式允许”的策略。
 
首先,我们将输入字符串用 HttpUtility.HtmlEncode()来编码,将其中的HTML标签彻底禁止。
 
然后,我们再对我们所感兴趣的、并且是安全标签,通过Replace()进行替换。
 
比如,我们希望有"<b>"标签,那么我们就将"<b>"显式的替换回"<b>"。
 
示例代码如下:
 


  void submitBtn_Click(object sender, EventArgs e)
  {
    // 将输入字符串编码,这样所有的HTML标签都失效了。
     StringBuilder sb = new StringBuilder(
                            HttpUtility.HtmlEncode(htmlInputTxt.Text));
     // 然后我们选择性的允许<b> 和 <i>
     sb.Replace("<b>", "<b>");
     sb.Replace("</b>", "");
     sb.Replace("<i>", "<i>");
     sb.Replace("</i>", "");
     Response.Write(sb.ToString());
   }

 

 
这样我们即允许了部分HTML标签,又禁止了危险的标签。
 
根据微软提供的建议,我们要慎重允许下列HTML标签,因为这些HTML标签都是有可能导致跨站脚本攻击的。


<applet> 
<body> 
<embed> 
<frame> 
<script> 
<frameset> 
<html> 
<iframe> 
<img> 
<style> 
<layer> 
<link> 
<ilayer> 
<meta> 
<object> 

 

可能这里最让人不能理解的是<img>。但是,看过下列代码后,就应该明白其危险性了。
 
 
<img src="javascript:alert('hello');">
<img src="java script:alert('hello');">
<img src="java script:alert('hello');">
 
通过<img>标签是有可能导致Javascript执行的,这样攻击者就可以做他想伪装的任何事情。
 
关于<style>也是一样:
 


<style TYPE="text/javascript">
   alert('hello');
</style>

 

 
 
参考:
 
HOW TO: 使用 Visual C# .NET 在 ASP.NET 中创建自定义错误报告
 
http://support.microsoft.com/kb/306355/zh-cn
 
HttpRequestValidationException 类 (System.Web)
 
http://msdn2.microsoft.com/zh-cn/library/system.web.httprequestvalidationexception(VS.80).aspx
 
 
MSDN: How To: Prevent Cross-Site Scripting in ASP.NET
 
http://msdn2.microsoft.com/en-us/library/ms998274.aspx
 
推荐大家阅读微软关于.Net安全的一系列文章:
 
http://msdn2.microsoft.com/en-us/library/ms978512.aspx
 
关于跨站脚本攻击请参考:
 
Wikipedia 维基大百科全书
 
http://en.wikipedia.org/wiki/Cross_site_scripting
 
Xfocus
 
http://www.xfocus.org/articles/200607/874.html
 
Google
 
http://www.google.com/search?q=%E8%B7%A8%E7%AB%99%E8%84%9A%E6%9C%AC%E6%94%BB%E5%87%BB
 



👍 赞0👎 踩
知识来源: www.2cto.com/Article/201310/250008.html

阅读:168922 | 评论:0 | 标签:xss 跨站

想收藏或者和大家分享这篇好文章→复制链接地址


“ASP.NET脚本过滤-防止跨站脚本(XSS)攻击”共有0条留言

 1. 




发表评论

姓名:

邮箱:

网址:

验证码: 93减加76是13






黑帝公告 📢

❤永久免费、持续更新、精选优质黑客技术文章的Hackdig,帮你成为掌握黑客技术的英雄❤

Powered by Google Übersetzer


↓赞助商↓ 💖




随机推荐 🤖

 * Linux的系统调用机制
 * 9月2日每日安全热点 - 曼谷航空高管为数据泄露道歉
 * 2021年恶意软件AdLoad绕过了苹果XProtect的防护
 * 奇安信红雨滴APT扫描引擎(RAS)加入PolySwarm平台
 * 吉大正元参加工信部商用密码应用推进标准工作组成立大会暨第一次全体成员会议
 * Java安全之Filter权限绕过
 * 【SRC挖洞经验】Amazon S3 Bucket桶接管教程
 * 探索未来AD防护方向,助力内网安全体系建设丨2021中安网星战略&产品发布会
 * 从零搭建 Vite + React 开发环境
 * 提高应用程序安全性的测试和方法有哪些?


标签云 ☁

漏洞
[13129]
安全
[11037]
攻击
[4264]
网络安全
[3845]
注入
[3705]
网络
[3550]
黑客
[2625]
CVE
[1869]
勒索
[1559]
xss
[1467]
云
[1354]
渗透
[1207]
数据安全
[1130]
美国
[1102]
泄露
[1084]
分析
[1067]
执行
[1038]
加密
[953]
linux
[935]
远程
[917]
windows
[915]
威胁情报
[821]
Android
[820]
CMS
[808]
恶意软件
[763]
招聘
[685]
ddos
[676]
情报
[661]
后门
[656]
APP
[641]
攻防
[617]
学习
[588]
AI
[583]
移动
[578]
扫描
[569]
智能
[554]
sql
[554]
渗透测试
[545]
保护
[536]
入侵
[529]
提权
[526]
Shell
[521]
apt
[518]
终端安全
[513]
0day
[498]
漏洞分析
[477]
安全报告
[470]
IOS
[469]
微软
[439]
exp
[433]

黑客技术 © 2012-2022 | 关于&合作 | 京ICP备15005440号-2



ORIGINALTEXT


Bessere Übersetzung vorschlagen

--------------------------------------------------------------------------------




图片分享