RSS 2.0 Feed
2008-02 Entries
摘要:       前面我写的“ASP.net 获得客户端的IP相关知识”博客中,有一个简单的例子,演示了如何客户端编码,修改 HTTP_VIA 和HTTP_X_FORWARDED_FOR ,进而让服务器无法了解你到底是否启用的代理服务器,以及启用的是代理服务器之后的你的真实IP地址。 结合上面的技术,编码使用代理服务器,其实是非常简单的。下面就是客户段的演示代码。比起上篇博客,只修改了几行。        下面演示代码中的代理服务器地址,可能在你试验的时候,已经不通了,请更换新的代理服务器地址。 class Program { static void Main(string[] args) { // 最新代理服务器的地址,可以参看下面的列表 // http://www.proxycn.com/html_proxy/http-1.html proxyTest("http://81.181.45.25:3128"); proxyTest("http://202.105.182.13:80"); ......[阅读全文]

posted @ | Feedback (4) | Filed Under [ .net 编程心得 网站开发管理相关内容 ]

摘要:       上一篇博客:ASP.net 获得客户端的IP相关知识 中我提到了,如果你想编码更改 HTTP_VIA、HTTP_X_FORWARDED_FOR 的值,你需要客户端增加的HTTP Head为:VIA、X_FORWARDED_FOR。即,少个 "HTTP_" 前缀。那么,到底读取这些值时,那些HTTP头增加时候需要增加HTTP_前缀,那些又不需要呢?         简单来说,出了一些系统预先定义的,有特殊意义的HTTP头外,其他都需要增加 "HTTP_" 前缀。这是W3C 的 The Common Gateway Interface (CGI) 规范的定义。这些预定义的变量如下: 变量 说明 APPL_MD_PATH 检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。 APPL_PHYSICAL_PATH 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路径以返回值。 AUTH_PASSWORD 该值输入到客户端的鉴定对话中。只有使用基本鉴定时,该变量才可用。 AUTH_TYPE 这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。 AUTH_USER 未被鉴定的用户名。 CERT_COOKIE 客户端验证的唯一 ID,以字符串方式返回。可作为整个客户端验证的签字。 CERT_FLAGS 如有客户端验证,则 bit0 为 1。如果客户端验证的验证人无效(不在服务器承认的 CA 列表中),bit1 被设置为 1。 CERT_ISSUER 用户验证中的颁布者字段(O=MS,OU=IAS,CN=user name,C=USA)。 CERT_KEYSIZE 安全套接字层连接关键字的位数,如 128。 CERT_SECRETKEYSIZE 服务器验证私人关键字的位数。如 1024。 CERT_SERIALNUMBER 用户验证的序列号字段。 CERT_SERVER_ISSUER 服务器验证的颁发者字段。 CERT_SERVER_SUBJECT 服务器验证的主字段。 CERT_SUBJECT......[阅读全文]

posted @ | Feedback (4) | Filed Under [ .net 编程心得 网站开发管理相关内容 ]

摘要:ASP.net 获得客户端的IP,最常见的是使用下述代码:string user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 对于了解代理服务器情况的人,我们会知道,如果用户使用了代理服务器,上述代码获得的是代理服务器的IP地址;如果用户使用了多个代理服务器,则是到达服务器的最后一个代理服务器的IP地址。   REMOTE_ADDR 说明: 访问客户端的 IP 地址。 此项信息用户不可以修改。如果真的给改了的话,你也和服务器连接不了了,服务器就是按照这个来与客户端建立连接并进行通讯的。实际我测试修改这个 ServerVariables , 一点效果都没有。仍然获得是实际的值。另: Request.UserHostAddress 和 Request.ServerVariables["REMOTE_ADDR"] 实际是同一个值。   如何绕过代理服务器获得用户真实的IP地址呢? 这时候我们一般是类似如下的代码(这里我简单起见,没有作一些边界判断)private static string getIp(){ if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[]{','})[0]; else return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];} 这样就足够了么? 这样是有问题的,HTTP_X_FORWARDED_FOR 、HTTP_VIA 是可以被冒名的。如果正好这里有SQL注入问题的话,那可非常严重了。   下面我们就来具体看HTTP_VIA 和HTTP_X_FORWARDED_FOR 这两个 ServerVariables。 HTTP_VIA  如果有该条信息, 就证明您使用了代理服务器,代理服务器的地址就是后面的数值。 HTTP_X_FORWARDED_FOR  如果有该条信息, 也证明了您使用了代理服务器代理服务器的地址就是后面的数值。 需要注意的,HTTP_X_FORWARDED_FOR  的值,并不一定是只有一个IP地址,下面的信息也是可能的,每行一条记录。下面数据取材于CSDN 实际的数据。10.194.73.11unknown, unknown, 211.100.22.30203.98.182.163, 203.98.182.163, 203.129.72.215172.16.20.110, 202.116.64.196, 203.81.21.6110.194.75.83, 10.194.73.11, 10.194.73.11, unknown192.168.120.57, unknown, unknown, 211.10.10.19510.2.4.211, 219.141.250.33.242.165.168, 218.108.22.164unknown, 211.100.22.30192.168.83.56, 210.21.224.233218.94.136.176, 203.81.21.61unknown, 210.75.1.18110.161.196.218, 202.104.134.23222.216.6.148, 222.216.6.146155.161.59.47, unknown 需要注意的是这两个值都是可以被改掉的。   对于这三个值:REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR  来说,可以分以下五种情况: 一、没有使用代理服务器的情况:       REMOTE_ADDR......[阅读全文]

posted @ | Feedback (8) | Filed Under [ .net 编程心得 网站开发管理相关内容 ]