phpThumb - 无效的哈希

时间:2011-08-13 18:56:58

标签: php hash

为网站设置phpThumb,我想通过对每个图像使用hash-url来保护脚本。

我在phpThumb.config.php中启用了安全选项:

// * Security configuration
$PHPTHUMB_CONFIG['high_security_enabled']    = true;  // if enabled, requires     'high_security_password' set to be set and requires the use of phpThumbURL() function (at the bottom of phpThumb.config.php) to generate hashed URLs
$PHPTHUMB_CONFIG['high_security_password']   = ' ';     // required if 'high_security_enabled' is true, and must be at complex (uppercase, lowercase, numbers, punctuation, etc -- punctuation is strongest, lowercase is weakest; see PasswordStrength() in phpThumb.php). You can use a password generator like http://silisoftware.com/tools/password-random.php to generate a strong password

我使用文档中描述的phpThumbURL()函数;

    require_once('img/phpThumb.config.php');
    echo '<img src="'.phpThumbURL('src=/wp-content/uploads/2011/08/wall140-73.jpg&amp;w=640&amp;h=400&zc=1').'">';

尽管如此,我得到的只是Error: Invalid hash

我没有这个安全选项让phpThumbs工作,但我真的不想让任何人在我的服务器上生成缩略图图像。

我不明白哈希是如何无效的,以及为什么它不起作用。

8 个答案:

答案 0 :(得分:1)

我有同样的问题,遗憾的是生产所以我必须解决它。

“phpThumb.config.php”底部有一个函数,它根据“$ parameterString”和“high_security_password”计算散列,将此散列与“phpThumb.php”中计算的散列进行比较。一切似乎都没问题,但在我的情况下,“phpThumb.config.php”中的“$ parameterString”包含特殊的HTML实体,而phpThumb.php中的“$ _SERVER ['QUERY_STRING']”则没有。所以我的解决方案是为“$ parameterString”添加“htmlspecialchars_decode”。

phpThumb v.1.7.11

答案 1 :(得分:1)

这可能看起来很愚蠢,但在我的配置中,似乎我得到的错误&#34;无效的哈希&#34;是由于在 phpThumb.config.php 末尾的 phpThumbURL 函数中使用 GLOBALS ,我得到了无效的哈希匹配是因为 phpThumb.php 中的哈希检查使用 high_security_password high_security_url_separator 进行匹配,而该功能本身位于 phpThumb中。 config.php 正在生成它,因为尽管 $ PHPTHUMB_CONFIG vars的 GLOBAL 声明,我的服务器忽略了它作为php_flag register_globals 关了。

我只是改变了

return $path_to_phpThumb.'?'.$ParameterString.$PHPTHUMB_CONFIG['high_security_url_separator'].'hash='.md5($ParameterString.$PHPTHUMB_CONFIG['high_security_password']);

return $path_to_phpThumb.'?'.$ParameterString.'&'.'hash='.md5($ParameterString.'my_high_security_password');

high_security_password high_security_url_separator 替换为实际值以解决此问题,

PHP 4.2.0 开始, register_globals 指令默认为关闭,

如果您的主机允许,可以使用 .htaccess ,并添加 .htaccess 条目:php_flag register_globals on

我应该注意到我没有收到任何错误消息,警告我发生了这种情况,并且需要进行一些调试才能回溯到以下事实:配置中没有使用密码或分隔符来生成哈希值引起了不匹配。

我甚至运行了 phpThumb.demo.check.php ,这表明我的服务器已准备就绪,并没有将此指定为潜在问题。

公平,因为 PHP 5 现在是所有网络服务器的标准,默认情况下注册全局关闭,需要启用phpThumb才能默认工作看起来有点疏忽,因为您希望该类在当前版本的PHP的典型默认值下工作。

答案 2 :(得分:1)

正如其他人提到的那样, register_globals 默认情况下在大多数环境中处于关闭状态,并且从 PHP 5.4.0 中删除后,您仍然可以使用$ GLOBALS。

之前

function phpThumbURL($ParameterString, $path_to_phpThumb='phpThumb.php') {
}

 $GLOBALS['PHPTHUMB_CONFIG'] = $PHPTHUMB_CONFIG;

在我的案例中解决了这个问题

答案 3 :(得分:1)

对我来说,帮助INFO位于 phpThumb.config.php

的底部
//////////////////////////////////////////////////////////////////////////////
// Function for generating hashed calls to phpThumb if 'high_security_enabled'
// example:
//   require_once('phpThumb/phpThumb.config.php');
//   echo '<img src="'.htmlspecialchars(phpThumbURL('src=/images/pic.jpg&w=50', '/phpThumb/phpThumb.php')).'">';

所以要做拇指我使用函数 htmlspecialchars(phpThumbURL(...))

$path = 'C:\wamp\www\_img_test\\'; // YOUR PATH
require_once($path.'phpThumb\phpThumb.config.php');

$img = '1.jpg'; // YOUR IMAGE
$ParameterString = 'w=200&h=200'; // YOUR PARAMS
$url = 'http://localhost/_img_test/'; // YOUR URL

$path = htmlspecialchars(phpThumbURL('src=../'.$img.'&'.$ParameterString, $url.'phpThumb/phpThumb.php'));
echo '<img src="'.$path.'">'; // YOUR IMAGE
echo $path; // // YOUR IMAGE PATH

当然在phpThumb.config.php中设置:

$PHPTHUMB_CONFIG['high_security_enabled']       = true;
$PHPTHUMB_CONFIG['high_security_password']      = 'V_8r}ZZj-)p4vVx0H6.4'; // YOUR PASSWD from: http://silisoftware.com/tools/password-random.php
$PHPTHUMB_CONFIG['disable_debug']               = true;

对我而言,它有效。

答案 4 :(得分:0)

这似乎是一个相当愚蠢的问题,但你确实填写了一个足够强大的high_security_password?

答案 5 :(得分:0)

在实时环境中工作时看起来会起作用。

它只是在我的本地主机上。

答案 6 :(得分:0)

尽管@ user3270861对于导致问题的原因是正确的,但这是一个更容易的解决方案:

您只需将global $PHPTHUMB_CONFIG;放在 phpThumb.config.php 文件开头的某处,例如在// START USER CONFIGURATION SECTION:部分之后。

答案 7 :(得分:0)

我自己就碰到了这个问题。

我使用url params形式的过滤器,如:

&fltr[]=mask|../images/test.png&

它在Chrome上工作正常,但事实证明Firefox改变了

[]加入%5B%5D

所以哈希搞砸了。

解决方案是在我的网址中用[]替换%5B%5D。 Chrome知道它没关系,Firefox也没有改变它。