2009年11月29日
#
如何为FireFox新增搜索引擎?
本文所指的是如下图所示的Firefox默认工具栏。

本文涉及以下几方面内容:
- 如何定义Firefox搜索引擎xml文件
- 如何生成icon程序(非原理)
- 如何生成base64的数据(非原理)
- 如何将自制搜索引擎增加到Firefox中
- 参考链接
直接使用
本文仅简要介绍如何增加FireFox搜索引擎文件。
如何定义Firefox搜索引擎xml文件
-
准备一个搜索引擎链接,比如:
Google India的;
http://www.google.co.in/search?q={searchTerms}
结果就是:
或者新浪围脖的:
http://t.sina.com.cn/k/{searchTerms}
其中{searchTerms}部分将最终被替换成你要搜索的选项。
-
搜索引擎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);
参考链接
2009年11月19日
#
在Web的体积越来越庞大的现在,Web所依赖的文件,诸如CSS、JS脚本等的数量与日俱增。虽然我们自豪地说我们的浏览器可以跑几个WPF都不卡,我们仍然不能忽视网络迟滞所带来的若干影响,这里就包括RoundTrip的影响。就像有些浏览器同一时间对同一域名/IP地址解析只允许有一个请求。如果我们的请求都来自同一个域,而我们的文件数量又非常多的话,我们所耗费的时间自然也就无故增加了,当然这是没有必要的。RoundTrip的影响还包括每次连接本身所需要的非数据流量,这些对一些流量敏感的用户而言就成为了一些潜在的问题,激烈竞争的现在,能替用户多想就能跑得更快更远。
用来减少RoundTrip的技巧有很多,当然,万变不离其宗,它的起因就是因为一次一次又一次地从客户端向服务器发送请求,减少它的请求,就是减少RoundTrip的数量。所以技巧中的很多内容就是告诉你,去掉不必要的,合并那些应该在一起的,尽可能多地把你的一些资源文件分散到多台服务器(避免同一时刻浏览器对同一域的请求有限制)。例如有很多小图片,则可以用CSS加合并图片的方式来减少RoundTrip,可以参考这里。
说了半天,就要引入我们今天的主角了,它的作用和雅虎Combohandler一致。我写VCombo也就是看到了雅虎Combo的这篇文章。我的代码仅供参考,您可以自行实现更符合您需求的代码。
图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的合并,你可以轻易扩展出其他类型的扩展。
- 拒绝对相同文件的重复合并。
- 单个合并后文件最大尺寸限定,单个网络文件最大尺寸限定。
从使用的角度上,其实是非常简单的,执行下列步骤:
- 引用DLL到你的项目中。新建一个Handler/ASPX页面,添加如下代码:
ComboHelper.AutoInovke(context, true);
- 将你原计划分散开的脚本资源或者样式表文件,用EncodeComboUrl(string httpHandler, string paras)(甚至可以不用)做一个合并即可。
因为源代码原理上很简单,这里就不进行赘述,大家自行下载阅读(跟一下就知道自己该改哪里了)。
点击这里:VS2010版本源码下载1(本地), VS2010版本源码下载2,VS2008版源码下载1(本地), VS2008版源码下载2!
2009年11月12日
#
今天看到微博上有人说有一种完美的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
2009年11月7日
#
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页面停止子请求。描述如下:
- 一个form表单的action的值为""的.aspx页面发送到浏览器。
- form表单做了一次回发。
- 一个托管的HTTP模块(HttpModule)试图阅读form表单的内容,比如使用了Request.Form或者Request.Params。这将导致POST请求被读入托管内存中。因此任何本地代码模块(native code module)在IIS7或则IIS7.5集成管道模式下,都无法阅读POST请求的数据。
- IISDefaultDocumentModule对象将运行并创建Default.aspx。然而因为POST的数据已经被托管代码读取,因此在子请求中将不可用。
- 然后就到了HTTP管道运行子请求,.aspx页面执行阶段的时候。
- 因为没有了POST的数据,因此没有form变量(表单域的值),也没有ViewState,因此也没有办法在.aspx页面执行的时候决定哪个事件(或其他别的)被触发(Raised)。
避免以上问题的方法有:
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.*。而
HtmlEncode和
HtmlDecode则移动到
System.Net.WebUtility类下。
输出缓存改变Vary * HTTP Header
主要是针对一些在Location="ServerAndClient"情况下的输出缓存是否输出"Vary *"的问题。
System.Web.Security里关于Passport的类型都已标注为[已过时]
这里的Passport也就是指LiveID。其相关的方法将逐渐不被支持。五个类型全部标注为已过时。
原文链接
2009年10月31日
#
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?参加讨论: 加载Wave需要几秒时间,请耐心等待!
2009年10月20日
#
摘要: 因为Sybase没有rownumber,所以最近要做迁移数据很头痛,我的做法是从表A生成一组SQL语句,将rownumber设置成一个特殊的关键字,然后用下面这个程序来将其替换成有效的值。准确得说,这个代码的功能就是将“字符串A”匹配成一个“前缀+顺序序列”的替换程序。GenRowNumber.aspxCode highlighting produc...
阅读全文
2009年10月14日
#
摘要: 这篇文档主要解决的问题是:在不使用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">&...
阅读全文
2009年9月30日
#
摘要: How to wake up the IE developer's tools?症状:在使用IE的时候,会发现“开发人员工具”(IE8(或安装了该组件的IE)下按F12),按理会出现IE8开发人员工具的窗体(独立窗体),或者一个内嵌于IE下方的扩展窗体(类似于Httpwatch的窗体)。独立窗体可以获得更广阔的视野,而扩展窗体在较大的屏幕下也能够获得更直接的使用体验,二者都...
阅读全文
2009年7月29日
#
摘要: 假设有一个网站不安全:http://www.unsafe.com 但是有个安全网站的某个地址只做重定向,而且不进行任何内部判断(或者说是安全判断),那么只要将不安全网站作为其参数,就可以绕开钓鱼网站判定机制。如: http://redirect.safe.com?ReturnUrl=http://www.unsafe.com 浏览该地址,的确会在安全网站上做一次操作,但是将完成一个重定向动作...
阅读全文
2009年7月25日
#
摘要: 今天同事问我一个“神奇”的问题,另一个同事“神奇”地找出了问题但无法解释,归咎于一种“习惯”或者“下次注意”。现在我把问题描述一下,并做一些解释。我的同事先是在现有工程中新加了一个aspx页面,然后从现有的执行正确的页面的源码中copy了一部分内容到新页面的相应位置,但却无意中留下了runat=R...
阅读全文