首页
导航
博客
电子书
算法
众创
代码
随贴
关于我们
您好,欢迎来到码863代码分享网! 请
[登录]
/
[注册]
搜 索
标题:
*
140
字
TAG标签:
(用空格隔开)
30
字
恢复历史版本:
请选择分类
html
python
javascript
php
sql
c
c++
c#
java
plain
所有人可见
仅自己可见
编辑器:UEditor
编辑器:TinyMCE
编辑器:Editor.md
HTML转MD
HTML转MD2
<p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(51, 102, 255); font-size: 18pt;">https://www.cnblogs.com/rendd/p/6183094.html</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(51, 102, 255); font-size: 18pt;">一、如果没有使用代理服务器,</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"> <span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">REMOTE_ADDR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">客户端IP </span></span><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">HTTP_X_FORWARDED_FOR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">没数值或不显示</span></span></p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important;"> $ip = $_SERVER['REMOTE_ADDR'];</pre><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"> </p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(51, 102, 255); font-size: 18pt;">二、使用透明代理,</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"> <span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">REMOTE_ADDR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">最后一个代理服务器 IP</span></span><br style="margin: 0px; padding: 0px;"/><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;"> HTTP_X_FORWARDED_FOR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">客户端真实 IP</span> (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"> <span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;">这类代理还会将客户真实ip发送到请求对象,无法隐藏真实ip。</span></span></p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important;"> $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];</pre><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(51, 102, 255); font-size: 18pt;">三、使用普通匿名代理服务器,</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5;"> </span><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0);">REMOTE_ADDR</span> </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">最后一个代理服务器 IP</span></span><br style="margin: 0px; padding: 0px;"/><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><code class="hljs" style="margin: 0px; padding: 0px;"> HTTP_X_FORWARDED_FOR</code> =<span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);"> 代理服务器 IP</span> (经过多个代理服务器时,这个值类似:203.98.182.163, 203.98.182.163, 203.129.72.215)</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"> <span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;">这样就隐藏了客户端的真实ip,但服务器会知道客户端是通过代理服务器去访问的。</span></span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18pt; color: rgb(51, 102, 255);">四、使用欺骗性代理服务器,</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;"> <code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">REMOTE_ADDR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">代理服务器 IP</span><br style="margin: 0px; padding: 0px;"/><code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;"> HTTP_X_FORWARDED_FOR </span></code>= <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);">随机的 IP</span>(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)</span></span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;"> 服务器可以识别到时通过代理服务器访问的,但发送给目标服务器的是虚假ip。</span></span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18pt; color: rgb(51, 102, 255);">五、使用高匿名代理,</span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;"> <code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">REMOTE_ADDR </span></code>=<span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);"> 代理服务器 IP</span> <code class="hljs nginx" style="margin: 0px; padding: 0px;"><span class="hljs-attribute" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">HTTP_X_FORWARDED_FOR </span></code>=<span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);"> 没数值或不显示</span></span></span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);"> <span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0);">使用这种代理时,不同浏览器不同设备会返回不同的ip头信息,因此PHP使用<code class="hljs bash" style="margin: 0px; padding: 0px;"><span class="hljs-variable" style="margin: 0px; padding: 0px; color: green; line-height: 1.5;">$_SERVER[<span class="hljs-string" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">"REMOTE_ADDR"]</span></span></code> 、<code class="hljs bash" style="margin: 0px; padding: 0px;"><span class="hljs-variable" style="margin: 0px; padding: 0px; color: green; line-height: 1.5;">$_SERVER[<span class="hljs-string" style="margin: 0px; padding: 0px; color: rgb(163, 21, 21); line-height: 1.5;">"HTTP_X_FORWARDED_FOR"]</span></span></code> 获取的值可能是空值也可能是“<code class="hljs" style="margin: 0px; padding: 0px;">unknown</code>”值。</span></span></span></span></p><p style="margin: 10px auto; padding: 0px; line-height: 1.5;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 18px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 16px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0);">PHP获取ip代码如下:</span></span></span></span></p><pre class="brush:php;toolbar:false">public function ip() { //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } $res = preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : ''; echo $res; //dump(phpinfo());//所有PHP配置信息 }</pre><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><strong style="margin: 0px; padding: 0px;">’REMOTE_ADDR’ ,’HTTP_X_FORWARDED_FOR’,’HTTP_CLIENT_IP’之间的区别?</strong></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><strong><br style="margin: 0px; padding: 0px;"/></strong>1.’REMOTE_ADDR’ 是远端IP,默认来自tcp 连接是,客户端的Ip。可以说,它最准确,确定是,只会得到直接连服务器客户端IP。如果对方通过代理服务器上网,就发现。获取到的是代理服务器IP了。<br style="margin: 0px; padding: 0px;"/>如:a->b(proxy)->c ,如果c 通过’REMOTE_ADDR’ ,只能获取到b的IP,获取不到a的IP了。</p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><br/></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);">2.’HTTP_X_FORWARDED_FOR’,’HTTP_CLIENT_IP’ 为了能在大型网络中,获取到最原始用户IP,或者代理IP地址。对HTTp协议进行扩展。定义了实体头。</p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><br style="margin: 0px; padding: 0px;"/>HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分割。 HTTP_CLIENT_IP 在高级匿名代理中,这个代表了代理服务器IP。既然是http协议扩展一个实体头,并且这个值对于传入端是信任的,信任传入方按照规则格式输入的。以下以x_forword_for例子加以说明,正常情况下,这个值变化过程。</p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><br style="margin: 0px; padding: 0px;"/><br/></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><strong style="margin: 0px; padding: 0px;">风险点所在:</strong><br style="margin: 0px; padding: 0px;"/>这些变量,来自http请求的:x-forword-for字段,以及client-ip字段。 正常代理服务器,当然会按rfc规范来传入这些值。但是,当一个用户直接构造该x-forword-for值,发送给用户,这样就好比就直接有一个可以写入任意值的字段。并且服务器直接读取,或者写入数据库,或者做显示。它将带来危险性,跟一般对入输入没有做任何过滤检测,之间操作数据源结果一样。</p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><br/></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><strong style="margin: 0px; padding: 0px;">对于上面getip函数:</strong><br style="margin: 0px; padding: 0px;"/>除了客户端可以任意伪造IP,并且可以传入任意格式IP。 这样结果会带来2大问题,其一,如果你设置某个页面,做IP限制。 对方可以容易修改IP不断请求该页面。 其二,这类数据你如果直接使用,将带来SQL注册,跨站攻击等漏洞。至于其一,可以在业务上面做限制,最好不采用IP限制。 对于其二,这类可以带来巨大网络风险。我们必须加以纠正。</p><p><br/></p>
CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网
湘ICP备2023018646号-1
MYSQl共执行 4 个查询,用时 0.001751184463501 秒,PHP脚本用时 0.003872 秒,占用内存 0.589 MB,Gzip 已启用