如何重写TimThumb以用于电子邮件

时间:2016-09-20 21:43:01

标签: php .htaccess mod-rewrite timthumb

在我的服务器上,我使用TimThumb作为插件来调整我的图像大小,除非我尝试在电子邮件内容中使用它,否则效果很好。

Google Gmail将此https://example.com/thumb.php?sr+c=输出为src属性(请注意加号)。

我因为查询而阅读了here

那么如何使用.htaccess重写我的网址并使用/thumb.php?src=移除/src/

这就是它看起来像图像的链接:

https://example.com/thumb.php?src=example.jpg

这就是我需要的

https://example.com/src/example.jpg

这是我目前的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter=$1 [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$         index.php?a=explore&filter=$1   [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$            index.php?a=page&filter=$1      [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=$1&q=$3 [L,QSA]

index.phpthumb.php都在根文件夹

更新

我尝试将此行添加到.htaccess并访问https://example.com/src/example.jpg,但再次无效,在这种情况下,它会重定向到" welcome"页。

RewriteRule ^src/([^/]*)$ /thumb.php?src=$1 [L]

第二次更新

我也试过了:

RewriteRule ^src/([^/]+)/?$ thumb.php?src=$1 [NC,QSA,L]

再次它没有工作https://example.com/src/example.jpg重定向到我的" welcome"页。

这就是我现在看起来的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter=$1 [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$         index.php?a=explore&filter=$1   [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$            index.php?a=page&filter=$1      [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src=$1 [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=$1&q=$3 [L,QSA]

第三次更新

thumb.php内部,这是我构建src查询的方式

$_GET['src'] = 'https://s3-eu-west-1.amazonaws.com/bucket1'.'/'.$_GET['src']; 

我无法弄清楚这里的错误。

第4次更新

基于Vladimir Cvetic的回答,我试过这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^src/(.*)$ /thumb.php?src=$1 [L,QSA]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter=$1 [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$         index.php?a=explore&filter=$1   [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$            index.php?a=page&filter=$1      [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src=$1 [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=$1&q=$3 [L,QSA]

它再次无效,这就是错误:

`The 't' parameter is not set.`

但是因为我设置了'然而它很奇怪。参数条件为空如下:

if(!empty($_GET['t'])) {
    if($_GET['t'] == 'a') {
        $type = 'uploads/avatars';
        $width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
        $height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
    } elseif($_GET['t'] == 'b') {
        $type = 'uploads/backgrounds';
        ...
    } else {
        exit('Invalid parameter value');
    }
} else {
    $_GET['t'] == 'a';
        $type = 'uploads/avatars';
        $width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
        $height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
}

的确,如果我访问https://example.com/thumb.php?src=example.jpg,我可以正确看到头像图片

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题: RewriteRule ^src/(.*)$ /thumb.php?src=$1 [L,QSA]

据我所知,TimThumb多年来一直没有维护,并且存在安全问题,允许攻击者在您的服务器上执行代码。快速google search将揭示大部分TimThumb漏洞。

我建议转到维护包。