玩转C科技.NET

从学会做人开始认识这个世界!http://tinyurl.com/volnet http://bit.ly/KMzi2

导航

<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

公告

Microsoft MVP!
Subscribe to this feed
Contact volnet online!

MSN群MyMSDN技术讨论群
群号:www.msdn@hotmail.com
Windows Live Alerts
LiveMessenger:
<My Library>

最新闪存

搜索

 

常用链接

我参与的团队

我的标签

随笔分类(162)

随笔档案(140)

文章分类(15)

文章档案(15)

相册

家园建设

最新随笔

积分与排名

  • 积分 - 228891
  • 排名 - 225

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

2009年11月29日 #

如何为FireFox新增搜索引擎?

如何为FireFox新增搜索引擎?

本文所指的是如下图所示的Firefox默认工具栏。
firefox toolbar
本文涉及以下几方面内容:

  • 如何定义Firefox搜索引擎xml文件
  • 如何生成icon程序(非原理)
  • 如何生成base64的数据(非原理)
  • 如何将自制搜索引擎增加到Firefox中
  • 参考链接

直接使用


本文仅简要介绍如何增加FireFox搜索引擎文件。

如何定义Firefox搜索引擎xml文件

  1. 准备一个搜索引擎链接,比如:
    Google India的;
    http://www.google.co.in/search?q={searchTerms}
    结果就是:

    或者新浪围脖的:
    http://t.sina.com.cn/k/{searchTerms}
    其中{searchTerms}部分将最终被替换成你要搜索的选项。
  2. 搜索引擎xml文件(本定义仅支持FireFox2.0以上版本,详见参考链接“OpenSearch”)
    <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/">
    <os:ShortName>Google India</os:ShortName>
    <os:Description>Google India</os:Description>
    <os:InputEncoding>UTF-8</os:InputEncoding>
    <os:Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgPd3d9yrKmt24mQhvCEknDwiZd28HyamfBqkpvwipCS8LKrq9vh391xf39/AgAAAAAAAAAAAAAAAMzMzAXOzNGbkJaM/3OdW/92qUj/eryR/0jX3f8Z0fP/Esbr/x621f9Emq3/ipSX/9LMzJvU1NQGAAAAAAAAAADW0tiViZp//2eqQP9qrTX/eL+i/yre//8H2v//C9j+/w7U+/8Oz/X/F8Hn/yeoxv9ulZ3/1tDOl39/fwLu6e47mKWP/mSrOv9HpA7/YYlN/27j//8t5v//JN3//xXb//8O2P7/D9T7/xrI7f8dveL/F6vL/4Ghqf/v5+dAxcfErW2nSv9Mpxr/PKIX/06XPP96ko3/ctns/0Lq//8n3///Etr//wzY/v8P1fr/F8js/xu43P8tpb//wMTGrqS6lfRcrC//QKQe/0ywRP9SvmL/Xa91/4aamf+R0Nz/iPL//17u//8b3f//Cdf+/w/T+P8axOj/FrHU/32xvvSMt3PwVK4x/0iuPv9Vu2f/YsmQ/6Dkwv+JpYb/VFRa/2Ntdv+Coav/i+f4/yHf//8L1fz/Ec3y/xi53v9KrsPwf7lm8E2vPP9SuF//XMaJ/5jgv/+Dm3z/RUst/3VXIP98URT/Tzoh/19wef9r4fX/Ddr//w/S+P8Zwub/OrDN8Hq6aPNQtU//WcJ7/3LVqv+izK7/UVk7/6p1Hv/kkSf/6pY0/8eGK/9XTDb/YazD/ynk//8G1///F83y/zq20vCYypDgVbtj/2DJkP+K37z/jrKQ/29dMf/kkzD/765t//K/iv/voU7/k31D/12frP9D7v7/KM3l/0CVpv9YoLrzvNy6nGPEff9lzJz/juG9/5e2pv90Xz//5J9D//SzcP/1xIn/9KdR/6aJUP9bd5T/VHWc/0FHjv80NqX/ncTcqefv5z+C0Z//f9ix/5vYsf+XpLf/bmmj/4pwV//UmGH/y4lR/6l1N/+RhJ3/Tkza/wwG4v8HA+//OEb3/+fz90EAAAAAw+jUha3ny/+tv6f/WFXi/0ZH8/9ub7v/aGOS/2Fdkf9pa7f/Y2Xy/w0N8/8AAOv/AADh/56r7psAAAAAAAAAAKqqqgPD6taJgY2E/0ZF2/8AAOL/Gxvm/z0/5/9BQuf/JCXm/wAA3P8AANX/AADN/1ZU2dLM5eUKAAAAAAAAAAAAAAAAAAAAAJuqoXhnZ9T9NDPS/wEByP8AAMn/AADI/wICyP8VFcn/MTHM/H9/3qCdk+IaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmprlRJub44qLi9/TeHjZ63l52uqOjuDPnp7liZWV40EAAAAAAAAAAAAAAAAAAAAA8A8AAMADAACAAQAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADwBwAA+B8=</os:Image>
    <os:Url type="text/html" method="GET" template="http://www.google.co.in/search?q={searchTerms}"></os:Url>
    </SearchPlugin>
                
    其中Image部分除了使用data: URI scheme,也可以直接使用链接:
                    <Image height="16" width="16" type="image/x-icon">http://example.com/favicon.ico</Image>
                
    或者 这些都是很容易理解的:
    • ShortName:用来显示在搜索引擎下拉框内的搜索引擎的名字。
    • Description:搜索引擎描述。
    • InputEncoding:使用搜索引擎的时候搜索项的默认编码方式。
    • Image:用来显示在搜索引擎下拉框内的搜索引擎的图标。
    • Url:搜索引擎执行的搜索模板以及一些搜索参数
    根据需要修改成你自己的解决方案,然后保存成xml文件,如:google-india.xml。根据本人简单测试,不支持本地路径的xml文件方案,你需要一个服务器用来放置该文件,或者你可以将它在本地发布成可以用http方式访问的即可。(How?

如何生成icon程序(非原理)

请访问:免费转换图片成icon的在线服务

如何生成base64的数据(非原理)

请访问:免费转换文件成base64的在线服务

如何将自制搜索引擎增加到Firefox中

使用脚本来增加你的搜索引擎(只支持Firefox2.0以上版本):
        window.external.AddSearchProvider("http://files.cnblogs.com/volnet/google-india.xml");
    
非Firefox2.0版本,请使用:Installing Sherlock plugins :window.sidebar.addSearchEngine(engineURL, iconURL, suggestedName, suggestedCategory);

参考链接

posted @ 2009-11-29 17:45 volnet(可以叫我大V) 阅读(52) | 评论 (0) |

2009年11月19日 #

用VCombo来快速减少站点RoundTrip,马上试试!

在Web的体积越来越庞大的现在,Web所依赖的文件,诸如CSS、JS脚本等的数量与日俱增。虽然我们自豪地说我们的浏览器可以跑几个WPF都不卡,我们仍然不能忽视网络迟滞所带来的若干影响,这里就包括RoundTrip的影响。就像有些浏览器同一时间对同一域名/IP地址解析只允许有一个请求。如果我们的请求都来自同一个域,而我们的文件数量又非常多的话,我们所耗费的时间自然也就无故增加了,当然这是没有必要的。RoundTrip的影响还包括每次连接本身所需要的非数据流量,这些对一些流量敏感的用户而言就成为了一些潜在的问题,激烈竞争的现在,能替用户多想就能跑得更快更远。

用来减少RoundTrip的技巧有很多,当然,万变不离其宗,它的起因就是因为一次一次又一次地从客户端向服务器发送请求,减少它的请求,就是减少RoundTrip的数量。所以技巧中的很多内容就是告诉你,去掉不必要的,合并那些应该在一起的,尽可能多地把你的一些资源文件分散到多台服务器(避免同一时刻浏览器对同一域的请求有限制)。例如有很多小图片,则可以用CSS加合并图片的方式来减少RoundTrip,可以参考这里

说了半天,就要引入我们今天的主角了,它的作用和雅虎Combohandler一致。我写VCombo也就是看到了雅虎Combo的这篇文章。我的代码仅供参考,您可以自行实现更符合您需求的代码。

twitter.com/volnet
图1. VCombo原理图

VCombo的功能很简单:
假设原来我们打算添加以下两个CSS文件:

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<link href="http://files.cnblogs.com/volnet/gocool.css" rel="stylesheet" type="text/css" />
现在我们可以改写成:
<link href="<%=VCombo.ComboHelper.EncodeComboUrl("ComboHandler.ashx", "http://files.cnblogs.com/volnet/gocool.css&/Styles/Site.css")%>" rel="stylesheet" type="text/css" />
最后我们将得到如下代码:
<link href="ComboHandler.ashx?http%3a%2f%2ffiles.cnblogs.com%2fvolnet%2fgocool.css%26%2fStyles%2fSite.css" rel="stylesheet" type="text/css" />

当前版本中,被合并的文件不应该包含一些会阻断合并后文件的信息:如:@charset "gb2312";,如果不是出现在第一个文件中,则有可能影响使用。

 

当前版本包含一些很酷的功能:

  • 合并同类型文件(限制不同类型文件合并)。
  • 混合不同类型文件聚合(再单独指定contentType(不区分大小写))以聚合包含在其间的该类型的文件。
  • 支持限定路径下的文件才可以被安全聚合(防止客户故意请求服务器上非允许资源。)
  • 支持远程文件。(http与https)
  • 支持缓存(无须每次都生成同样的文件)
  • 支持URL安全,可自定义URL规则进行转义,让客户端无法直接手写引用。
  • 支持CSS/Javascript的合并,你可以轻易扩展出其他类型的扩展。
  • 拒绝对相同文件的重复合并。
  • 单个合并后文件最大尺寸限定,单个网络文件最大尺寸限定。

 

从使用的角度上,其实是非常简单的,执行下列步骤:

  1. 引用DLL到你的项目中。新建一个Handler/ASPX页面,添加如下代码:
    ComboHelper.AutoInovke(context, true);
  2. 将你原计划分散开的脚本资源或者样式表文件,用EncodeComboUrl(string httpHandler, string paras)(甚至可以不用)做一个合并即可。

 

因为源代码原理上很简单,这里就不进行赘述,大家自行下载阅读(跟一下就知道自己该改哪里了)。

点击这里:VS2010版本源码下载1(本地), VS2010版本源码下载2,VS2008版源码下载1(本地), VS2008版源码下载2

posted @ 2009-11-19 00:30 volnet(可以叫我大V) 阅读(1020) | 评论 (7) |

2009年11月12日 #

【代码保留】How to match the IP Address

今天看到微博上有人说有一种完美的IP判断方法,我就跑过去瞅了瞅,是PHP的,关键是用到了正则表达式。我本人对正则表达式可没好感了,因为它们的引擎需要解析那段规则(RegExp),然后把它们用通用的方式进行模式匹配,它的确给开发带来了便利,但对于判断一个字符串是否是IP地址的简单且通用的过程,我们有必要提供一种更定制化(量身定做)的方法用来做匹配。下面就是我用JavaScript写的一个DEMO,为了保证更好的移植性,代码以C风格书写,并考虑到一些C相关的特性(包括字符串char*无长度的概念,但也不可能直接用GCC来编译,毕竟是不同语言)

示例:(直接点击试用)

 

 1     <script language="javascript" type="text/javascript">
 2     function isIp( ipStr ) {
 3         if(!ipStr)    return false;
 4         
 5         /*1.check length;*/
 6         /*const*/ var minLengthLimit = 7// 0.0.0.0
 7         /*const*/ var maxLengthLimit = 15// 255.255.255.255;
 8         var length = stringGetLength(ipStr);
 9         if(length < minLengthLimit || length > maxLengthLimit)
10         {
11             return false;
12         }
13         
14         /*2.check base;*/
15         var lastIndex = length - 1;
16         var firstElement = ipStr.charAt(0);
17         var lastElement = ipStr.charAt(lastIndex);
18         if( firstElement == "." || firstElement < "0" || firstElement > "9"
19         || lastElement == "." || lastElement < "0" || lastElement > "9"){ 
20             return false;
21         }
22 
23         var curNum = "";
24         var pointCounter = 0;
25         var numLength = 0//for C language
26         for(var i = 0; i < length; ++i) {
27             var c = ipStr.charAt(i);
28             if( c >= "0" && c <= "9") {
29                 curNum += c;
30                 ++numLength;
31                 if( numLength > 3)  return false;
32             }
33             else if( c == ".") {
34                 ++pointCounter;
35                 if(pointCounter > 3)    
36                     return false;
37                 if(numLength == 3) {
38                     if(!checkLess255(curNum, 0))    return false;
39                 }
40                 if(pointCounter == 3) {
41                     var lastNumLength = lastIndex - i;
42                     if(lastNumLength > 3)   return false;
43                     var j = i + 1;
44                     if(lastNumLength == 3)
45                     {
46                         if(!checkLess255(ipStr, j))  return false;
47                         ++j;
48                     }
49                     for(; j < length; ++j) {
50                         c = ipStr.charAt(j);
51                         if( c < "0" || c > "9"return false;
52                     }
53                     return true;
54                 }
55                 curNum = "";
56                 numLength = 0;
57             }
58             else    return false;
59         }
60     }
61     
62     function checkLess255( strNum, startIndex) {
63         var numLength = stringGetLength( strNum ) - startIndex;
64         if(numLength > 3)   return false;
65         if(numLength == 3) {
66             var hundredPlace = strNum.charAt(startIndex);
67             if(hundredPlace > "2" /*|| hundredPlace < "0"*/)  return false;
68             else if(hundredPlace == "2") {
69                 var tenPlace = strNum.charAt(startIndex + 1);
70                 if(tenPlace > "5")  return false;
71                 else if(tenPlace == "5") {
72                     if(strNum.charAt(startIndex + 2> "5")  return false;
73                 }
74             }
75         }
76         return true;
77     }
78 
79     /*inline*/ function stringGetLength( str ) {
80         if(!str)    
81             return 0;
82         else
83         {
84             try
85             {
86                 return str.length;
87             }
88             catch(e)
89             {
90                 return 0
91             }
92         }
93     }
94     
95     </script>

PHP的那段代码我也复制过来了,正则嘛,总是特别短,精简,你一定也会很喜欢的,也许有的场合您更喜欢(同样也可以很容易转换成JavaScript):

 

 1 function is_ip($str){
 2         $ip = explode(”.,$str);
 3         for($i=0;$i<count($ip);$i++)
 4        {
 5               if($ip[$i]>255){
 6                return (0);
 7                }
 8         }
 9         return ereg(”^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$”,$str);
10 }

 

关键字:用C语言,判断字符串是不是IP

posted @ 2009-11-12 00:42 volnet(可以叫我大V) 阅读(98) | 评论 (0) |

2009年11月7日 #

Notes of "ASP.NET 4 Beta 2 Breaking Changes"

Web.config中ControlRenderingCompatabilityVersion设置

修改了ASP.NET控件的一些标记,如果在VS2010中将2.0或3.5的程序进行升级,那么将会保留旧的规则。但是如果在IIS中将其设置成.NET Framework4,则将使用新的渲染模式。涉及到的有:

  • Image和ImageButton控件不再输出border="0"属性。
  • BaseValidator类以及验证控件默认情况下将不以红色字体显示。
  • HtmlForm控件将不再输出name属性。
  • Table控件将不再输出border="0"属性。
  • 控件将不再为用户输入而设计,如果它们的Enabled设置为false也不会再写disabled="disabled"(比如,Label控件)。
    例如,下面的代码:
    <asp:Label ID="lbTextUnabled" Enabled="false" Text="This is a Label unabled!" runat="server"></asp:Label>
    <asp:Label ID="lbTextEnabled" Enabled="true" Text="This is a Label enabled!" runat="server"></asp:Label>
    <hr />
    <asp:Button ID="btnSubmitUnabled" Enabled="false" runat="server" Text="Submit Unabled"></asp:Button>
    <asp:Button ID="btnSubmitEnabled" Enabled="true" runat="server" Text="Submit Enabled"></asp:Button>
    将会替换为:
    <span id="MainContent_lbTextUnabled" class="aspNetDisabled">This is a Label unabled!</span>
    <span id="MainContent_lbTextEnabled">This is a Label enabled!</span>
    <hr />
    <input type="submit" name="ctl00$MainContent$btnSubmitUnabled" value="Submit Unabled" id="MainContent_btnSubmitUnabled" disabled="disabled" class="aspNetDisabled" />
    <input type="submit" name="ctl00$MainContent$btnSubmitEnabled" value="Submit Enabled" id="MainContent_btnSubmitEnabled" />

ClientIDMode改变(客户端ID的变化)

ASP.NET4默认允许你选择如何设定客户端ID。过去的版本在这里是设置ClientIDMode成“AutoID”,但ASP.NET4默认是“Predictable”模式。如果在VS2010中,升级2.0或3.5的程序,将会自动增加“”。如果在IIS中将其设置成.NET Framework4则需要手动添加来强制使用旧的规则,否则将使用新规则。

浏览器定义文件更新

浏览器定义文件进行了更新,删除了一些已经淘汰的浏览器,如:Netscape,增加了一些新型的浏览器,如Google Chrome以及Apple iPhone。

ASP.NET中,context.Request.Browser.Cookies = true的时候,是否一定可以利用客户端Cookies。如果回答不是,则询问:“MSDN中解释:获取一个值,该值指示浏览器是否支持 Cookie。”,你为何回答“不是”?(正确答案:不是,理由:Cookies值只能表示当前访问的浏览器,假设是IE8,则是指IE8是支持Cookies的,而不是指当前用户的计算机上的 IE8是否支持Cookies。(回答到这里+5分)HttpRequest的Browser属性是通过在应用程序中,或者在全局缓存中设置的 ×.BROWSERS文件里所设定的内容来加载的(ASP.NET 1.1则在Machine.config文件中有browserCaps配置节,但在ASP.NET2.0中被否定(但仍然可以使用)),当用户代理(IE/FireFox等浏览器)将自身的信息发送给浏览器时,将通过在BROWSERS中设置的正则表达式进行匹配(MATCH),如果匹配成功则加载对应的XML信息,并构造出HttpBrowserCompatibilies对象进行加载。而不是由用户浏览器发送当前的设置信息给服务器,来进行“设置”对应值的。
  • 什么是浏览器定义文件?答:一些关于各种浏览器的XML定义的文件,用于反应出该浏览器所具有的功能的描述文件。
  • 参考链接1:http://msdn.microsoft.com/zh-cn/library/system.web.configuration.httpcapabilitiesbase.cookies%28VS.80%29.aspx
  • 参考链接2:http://msdn.microsoft.com/zh-cn/library/3yekbd5b%28VS.80%29.aspx

现在默认的哈希算法是HMACSHA256

就像Form表单验证的Cookie和ViewState现在默认的哈希验证算法将变为:HMACSHA256,而之前的版本中是:HMACSHA1

<machineKey validation="SHA1" />

ASP.NET 4的相关配置错误

本节主要涉及了一些关于hotfix,详见“Configuration Errors Related to New ASP.NET 4 Root Configuration/Resolving These Issues

HttpRequest.FilePath属性将不再包含在PathInfo的值

本节,看完示例应该就明白了。

/testapp/Action.mvc/SomeAction
  在早期版本的ASP.NET中,HttpRequest的一些属性值如下:
    HttpRequest.FilePath: /testapp/Action.mvc/SomeAction
    HttpRequest.PathInfo: (empty)
  在ASP.NET 4中,HttpRequest的一些属性值如下:
    HttpRequest.FilePath: /testapp/Action.mvc
    HttpRequest.PathInfo: SomeAction

在IIS7或者IIS7.5集成管道模式下,默认文档的事件处理程序可能不可用

在ASP.NET 4中,默认的form表单的action属性将会被设置成“""”(空)而不是“Default.aspx”。

    <form action="Default.aspx" />
    <form action="" />
如果action属性为空字符串,则IIS的DefaultDocumentModule对象将创建一个子请求到Default.aspx。
然而,这将导致托管代码与IIS7或者IIS7.5导致.aspx页面停止子请求。描述如下:
  1. 一个form表单的action的值为""的.aspx页面发送到浏览器。
  2. form表单做了一次回发。
  3. 一个托管的HTTP模块(HttpModule)试图阅读form表单的内容,比如使用了Request.Form或者Request.Params。这将导致POST请求被读入托管内存中。因此任何本地代码模块(native code module)在IIS7或则IIS7.5集成管道模式下,都无法阅读POST请求的数据。
  4. IISDefaultDocumentModule对象将运行并创建Default.aspx。然而因为POST的数据已经被托管代码读取,因此在子请求中将不可用。
  5. 然后就到了HTTP管道运行子请求,.aspx页面执行阶段的时候。
  6. 因为没有了POST的数据,因此没有form变量(表单域的值),也没有ViewState,因此也没有办法在.aspx页面执行的时候决定哪个事件(或其他别的)被触发(Raised)。
避免以上问题的方法有:
  • 标识出HTTP模块访问默认文档请求的时候,决定请求内容(request's entity body)是否只允许被托管请求读取。在IIS7或者IIS7.5集成模式下,HTTP模块可以被标识为是否只允许托管请求访问,在system.webServer/modules节点下增加
        precondition="managedHandler"
    这会强制该模块只针对发送给托管 (ASP.NET) 处理程序的请求运行。因为请求的action是"",因此它不会执行托管模块,因此也就不会使POST的数据不可用了。
  • 但是,如果HTTP模块必须针对所有类型的请求(静态文件,没有指明具体文件的URL的DefaultDocumentModule对象,以及托管请求等)。那么将action设置为非空字符串即可,比如“Default.aspx”。

ASP.NET代码访问安全性(CAS)的一些改变

之前一部分“部分信赖(partial-trust)”的代码依赖于全局程序集缓存(GAC)的代码将有可能遭遇莫名其妙的错误。
对于ASP.NET 4应用程序,如果你要以旧的代码访问安全性策略来做的话,可以设置如下语句:

<trust level= "Medium" legacyCasModel="true" />
因为代码访问安全性的问题,以后就不可以在非web(non-web)应用程序中引用System.Web.*下的代码了,它们都要求有AspNetHostingPermission权限。System.Web.HttpUtility也相应地改动了命名空间,为System.Web.ClientServices.*。而HtmlEncodeHtmlDecode则移动到System.Net.WebUtility类下。
相关链接:

输出缓存改变Vary * HTTP Header

主要是针对一些在Location="ServerAndClient"情况下的输出缓存是否输出"Vary *"的问题。

相关链接:

System.Web.Security里关于Passport的类型都已标注为[已过时]

这里的Passport也就是指LiveID。其相关的方法将逐渐不被支持。五个类型全部标注为已过时。

原文链接

posted @ 2009-11-07 03:11 volnet(可以叫我大V) 阅读(58) | 评论 (0) |

2009年10月31日 #

ASP.NET 4.0验证请求(更新)<-加入Google Wave一起讨论!

A potentially dangerous Request.Form value was detected from the client (ctl00$MainContent$txtCode="<code></code>").

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. To allow pages to override application request validation settings, set requestValidationMode="2.0" in the configuration section. After setting this value, you can then 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. For more information, see http://go.microsoft.com/fwlink/?LinkId=153133.

Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (ctl00$MainContent$txtCode="<code></code>").



Version Information: Microsoft .NET Framework Version:4.0.21006; ASP.NET Version:4.0.21006.1

 

在安装了Visual Studio 2010 Beta2之后,当页面输入框默认情况下输入“<”或者“>”的时候。按照访问策略,这将导致一些安全问题,诸如:跨站脚本攻击(cross-site scripting attack)。而这个问题的更准确描述则是,当你在安装了.NET Framework 4.0以上版本后,当你的应用程序以.NET Framework 4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括Web Services等各种HTTP请求,不仅仅针对aspx页面,也针对HTTP Handler,HTTP Module等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。

基于以上原理,在ASP.NET之前的版本中,请求验证也是默认开通的,但是发生在页面级(aspx)的,并且只在请求执行的时候生效,因此,在旧的版本中,我们只需要按以下方式配置即可:

在页面级别(aspx中)设置
ValidateRequest="false"
或者
在全局级别(Web.config中)设置
<configuration>
    <system.web>
        <pages  validateRequest="false">

但是,以上设置仅对ASP.NET4.0以上有效。在ASP.NET4.0版本上,我们需要更多一行的配置:

在全局级别(Web.config中)设置
<configuration>
    <system.web>
        <httpRuntime  requestValidationMode="2.0">

这一点其实在发生错误的页面中已经有说明了。在实际使用过程中,不仅如此,而且我发现requestValidationMode只要设置成小于4.0就可以,比如:1.0,2.0,3.0,3.9都是可以的,错误提示中指明用2.0,目的只是说明用ASP.NET 2.0的默认方式进行工作。

参考链接:


代码下载:WebAppValidationRequest.zip

有Google Wave?参加讨论:  

 

 

 

posted @ 2009-10-31 02:23 volnet(可以叫我大V) 阅读(206) | 评论 (1) |

2009年10月20日 #

【代码保留】用于生成RowNumber的程序

     摘要: 因为Sybase没有rownumber,所以最近要做迁移数据很头痛,我的做法是从表A生成一组SQL语句,将rownumber设置成一个特殊的关键字,然后用下面这个程序来将其替换成有效的值。准确得说,这个代码的功能就是将“字符串A”匹配成一个“前缀+顺序序列”的替换程序。GenRowNumber.aspxCode highlighting produc...  阅读全文

posted @ 2009-10-20 21:20 volnet(可以叫我大V) 阅读(113) | 评论 (0) |

2009年10月14日 #

Using the Iframe to implement the Ajax

     摘要: 这篇文档主要解决的问题是:在不使用JavaScript进行跨域访问的前提下,实现post回发,进行表单提交。 vframe_post.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">&...  阅读全文

posted @ 2009-10-14 01:08 volnet(可以叫我大V) 阅读(48) | 评论 (0) |

2009年9月30日 #

How to wake up the IE developer's tools?

     摘要: How to wake up the IE developer's tools?症状:在使用IE的时候,会发现“开发人员工具”(IE8(或安装了该组件的IE)下按F12),按理会出现IE8开发人员工具的窗体(独立窗体),或者一个内嵌于IE下方的扩展窗体(类似于Httpwatch的窗体)。独立窗体可以获得更广阔的视野,而扩展窗体在较大的屏幕下也能够获得更直接的使用体验,二者都...  阅读全文

posted @ 2009-09-30 13:37 volnet(可以叫我大V) 阅读(52) | 评论 (0) |

2009年7月29日 #

[网站安全]避免在站点中通过URL参数做重定向

     摘要: 假设有一个网站不安全:http://www.unsafe.com 但是有个安全网站的某个地址只做重定向,而且不进行任何内部判断(或者说是安全判断),那么只要将不安全网站作为其参数,就可以绕开钓鱼网站判定机制。如: http://redirect.safe.com?ReturnUrl=http://www.unsafe.com 浏览该地址,的确会在安全网站上做一次操作,但是将完成一个重定向动作...  阅读全文

posted @ 2009-07-29 21:37 volnet(可以叫我大V) 阅读(1923) | 评论 (15) |

2009年7月25日 #

ASP.NET中aspx页面runat="server"的本质(Essensial of runat=”server” in ASP.NET)

     摘要: 今天同事问我一个“神奇”的问题,另一个同事“神奇”地找出了问题但无法解释,归咎于一种“习惯”或者“下次注意”。现在我把问题描述一下,并做一些解释。我的同事先是在现有工程中新加了一个aspx页面,然后从现有的执行正确的页面的源码中copy了一部分内容到新页面的相应位置,但却无意中留下了runat=R...  阅读全文

posted @ 2009-07-25 02:32 volnet(可以叫我大V) 阅读(2874) | 评论 (16) |

使用Live Messenger联系我
关闭