zoukankan      html  css  js  c++  java
  • 做程序的人要认真

    一段代码让我感到耻辱。


     if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
         {
                  strIp = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
         }
         else
        {
                   strIp = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
        }

    具体说下这段代码的作用。

    获取用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

    一、没有使用代理服务器的情况:

          REMOTE_ADDR = 您的 IP
          HTTP_VIA = 没数值或不显示
          HTTP_X_FORWARDED_FOR = 没数值或不显示

    二、使用透明代理服务器的情况:Transparent Proxies

          REMOTE_ADDR = 最后一个代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

    三、使用普通匿名代理服务器的情况:Anonymous Proxies

          REMOTE_ADDR = 最后一个代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

    四、使用欺骗性代理服务器的情况:Distorting Proxies

          REMOTE_ADDR = 代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

    五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

          REMOTE_ADDR = 代理服务器 IP
          HTTP_VIA = 没数值或不显示
          HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

     在第五情况下,HTTP_VIA 没有数值。这个说明客户使用的是高匿名代理服务器。

     在这种情况下,很难测试出bug。由于在一般的网络配置下,都可以获得数据。很难测试出来,这段代码我写的时间比较早有时会直接用网络上的代码。自己对这段代码没有仔细的研究,所以对自己没有研究或学习的代码要格外小心。自己一定要进行单元测试。从这次出现的问题我是要付完全的责任。关键是这个bug只在相应的网络中出现。思考问题不全面。

        从一个silverlight项目排除bug的次序应该是先wcf -> asp.net  ->   silverlight 版本 ->xap 包。

       开始出现一部分人能得到数据一部分人不能得到数据。开始考虑是网络环境制约了数据的读取,而没有考虑是代码出了问题。从这个问题上看,是一个相互制约的问题。当网络环境有问题的时候,应该先考虑自己的代码。对自己引用的代码一定要格外小心,测试引用的代码一定要测试。同时,写代码一定要用防守式编程。

        这件事情让我感到耻辱,我写在这里让我永远记得。

                                                                                                                                                                                                                  吴磊 

                                                                                                                                                                                                              2011.11.11

     

      

     


  • 相关阅读:
    前端安全-XSS攻击
    leetcode-0003 无重复字符的最长子串
    leetcode-0002 两数相加
    leetcode-0001 两数之和
    数据结构篇-数组(TypeScript版+Java版)
    前端性能优化(一)-- 文件的压缩与合并
    《深入浅出RxJS》读书笔记
    python工具函数
    [其他]Ubuntu安装genymotion后unable to load VirtualBox engine
    [linux]CentOS无法使用epel源
  • 原文地址:https://www.cnblogs.com/Brian/p/2245806.html
Copyright © 2011-2022 走看看