为网站设置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&w=640&h=400&zc=1').'">';
尽管如此,我得到的只是Error: Invalid hash
我没有这个安全选项让phpThumbs工作,但我真的不想让任何人在我的服务器上生成缩略图图像。
我不明白哈希是如何无效的,以及为什么它不起作用。
答案 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也没有改变它。