2011-03-08 19 views
0

你好我试图植入类似static.domain.com我们可以把我们的图像没有cookie的地方。但问题是即时通讯服务通过PHP我的形象。这样如何实现无cookie的域或请求?

public function getIMG($img) 
{ 
    if (! file_exists("www-static". DS ."assets". DS ."images". DS . $img)) { 
     throw new Exception("No such img as $img"); 
    } 

    $img = "/image-static". DS ."assets". DS ."images". DS . $img; 
    echo '<img src="' . $img . '" />'; 
} 

我们仍然可以植入他们?也许使用php cookie_set,并以某种方式清除所有的cookie?但如果我正确的话,我会害怕它的一部分与会议。

这里是来自萤火虫的要求。

enter image description here

+2

你有什么散列函数用来生成会话ID吗?这是猥亵的漫长和不必要的。 – Charles 2011-03-08 06:46:34

+0

512散列。 (我知道它的过度杀伤力),但我的团队已经考虑过它(安全性高于性能),这就是为什么我们试图将性能提高到其他地方,比如提供足够好的静态内容。 etc. – 2011-03-08 06:51:21

+0

如何防止恶意字符注入'$ img'参数?如果攻击者提供像'“../../../../../ config/database.conf”或“../../../../”这样的'$ img', ./var/lib/mysql/databasename.db“'这段代码将很高兴地给攻击者提供你的数据库用户名/密码或数据库或其他应该保持私有的数据。 – sarnold 2011-03-08 06:59:28

回答

1

这是被使用会话时自动创建的PHP会话cookie。关于如何禁用它,请参阅this question

+0

我们是否可以在我们提出这样的要求时关闭它,然后再打开它,我不知道如果我们禁用它会发生什么情况。编辑*正如我所说的问题是即时从服务于我的图像框架,所以它是一个不是吗? – 2011-03-08 06:44:45

+0

@adam你想要删除的特定原因?如果你需要会话,那么它是没有办法的(除非你将它追加到URL而不是cookie,我猜这不会帮助你的担忧) – 2011-03-08 06:47:21

+0

以及只是遵循雅虎通告的static.domain.com。看起来他们是对的,我们使用cookie来提供服务的图像是什么? http://developer.yahoo.com/performance/rules.html – 2011-03-08 06:49:05

0

你仍然可以做类似于你的描述。诀窍在于,不是检查图像是否在本地文件系统中,而是检查图像是否在远程服务器上可用。

您可能需要使用类似:

$image_headers = get_headers('http://static.domain.com/image.png'); 
if (false !== strpos($image_headers[0], '200')) 
    // echo image tag if the response's status code is 200 

当然,不断ping一台远程服务器是一个昂贵的过程。所以你可能想要保留static.domain.com上可用的本地图像列表