【问题标题】:HTTP_HOST strlen wrong lengthHTTP_HOST strlen 长度错误
【发布时间】:2013-10-01 17:11:29
【问题描述】:

我正在尝试将HTTP_HOST 与我失败的域名进行比较。为了找出造成这种情况的原因,我试图打印它的长度。令我惊讶的是,它输出了我实际域名的长度(尽管我使用的是网络代理)。

使用strlen 我会收到与var_dump() 输出中相同的长度(仅显示必要的部分):

["HTTP_HOST"]=>
string(12) "mydomain.com.s48.wbprx.com"
["SERVER_NAME"]=>
string(12) "mydomain.com.s48.wbprx.com"

我的原始域已替换为 mydomain.com,包括字符串的长度。

我很震惊,为什么我可以使用echo打印字符串并看到它的整体,但没有得到字符串的长度?即使我做了str_replace('.','', $str),它也会回复我"mydomaincom"

如果有任何帮助,我的网站也使用以下 htaccess 代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Removes .php
RewriteCond $1 !\.(gif|jpe?g|png|bmp)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
</IfModule>

我尝试过使用 .php 和不使用。结果一样。

这个结果是使用:https://incloak.com/产生的

我的 PHP 版本是 5.3.14,如果这有什么不同的话。

【问题讨论】:

  • 我没有看到 strlen() echo 的输出?
  • @Martijn 事实上,我没有正确地制定自己。 strlen 给出的长度与 var_dump 中的相同
  • @Jakub 你没有看到 var_dump 输出吗?长度是 12,即使它应该是完整的字符串? "mydomain.com.s48.wbprx.com"
  • 在将参数传递给strlen 之前,您应该始终先将其传递给trim。试试这个,strlen(trim($string))
  • 我认为您要表达的意思是,您说该字符串是 26 个字符,但仅报告长度为 12。对吗?当你$hh = $_SERVER['HTTP_HOST']; var_dump($hh); 时会发生什么?

标签: php


【解决方案1】:

看起来 PHP 存储的字符串的内部长度设置为 12,但实际字符串要长得多(并且可能以 null 结尾)。这可能是潜在的攻击吗?

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 2015-08-09
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多