确保PHP代理?(Secure a php proxy?)

2019-08-02 21:27发布

所以,在我的网站(https://example.com)我有一个解析last.fm API和拉回图像了他们Akamai的CDN并将其显示在页面上的页面。

事情是所有的图像都供职于只允许HTTP,HTTPS,不支持。

例如: http://userserve-ak.last.fm/serve/64s/76030502.png

我有一个PHP编写的图片代理:

<?php
header('Content-Type: image/png');
if(isset($_GET['img'])){echo file_get_contents($_GET['img']);}
?>

这完美的作品,但是,是不是安全可言,我想,这样只有我的服务器可以使用图片代理,并为在URL这样的哈希值可能是最好的选择吗?

https://example.com/proxy.php?url=http://last.fm/image.jpg&hash=hashhere

我曾想过使用:

md5($_GET['img']."privatekeyhere");

然后我的问题变成,如何我把javascript代码的私有密钥,而无需访问它的整个世界?

任何帮助非常赞赏。


因为我已经写了这个剧本是有点效果,但仍然被规避开放:

<?php
$args = $_GET['q'];
$date = date('m-d-Y-h-i', time());

list($hash,$img,$auth) = explode("/", $args);

if($hash=="need" && $auth=="key"){
    $checksum = md5($img.$date);
    echo $checksum;
}

if($hash==md5($img.$date))
{
    header('Content-Type: image/png');
    echo file_get_contents('http://userserve-ak.last.fm/serve/64s/' . $img);
}
?>

这可以被称为像这样: https://www.mylesgray.com/lastfm/need/76030502.png/key

然后,AUTH码可以插入在以显示图像: https://www.mylesgray.com/lastfm/{code-here}/76030502.png

任何意见 - 但是有人找出他们可以建立一个脚本,每分钟轮询的关键它并不需要很长时间?

Answer 1:

产生独特的标记。 你在正确的轨道上散上,但如果你把你的私钥常数,它最终会得到野蛮强制。 从那里,彩虹表打招呼。

你有效地将不得不从用于防止CSRF滥用机制借用或二叶,为你有效地试图做同样的事情:限制用户令牌每一个查询,用不能由再生令牌他们。

这里有很多方法可以做到这一点,和平时的权衡效率与安全之间。 最简单的是你提出什么 - 这是很容易蛮力forceable。 在光谱的另一端是DB的方法 - 生成每次访问的唯一的令牌,将其存储在一个数据库,并验证对这一后续调用。 这是很DB-密集,但工程进行相对较好 - 与几乎是不可能打破,除非令牌生成较弱。



文章来源: Secure a php proxy?
标签: php hash proxy md5