嵌入图像的脚本

时间:2008-11-27 00:25:03

标签: php mysql security

我运行一个小型浏览器MMO,我遇到一个问题,其中有几个用户将脚本嵌入到他们的个人资料图片中,并使用它们来对所述用户和我的游戏进行攻击。有没有办法防止这种情况发生,或者我是否需要阻止人们使用他们自己的自定义图像?

如果有帮助,可以在PHP / MySQL中完成。

4 个答案:

答案 0 :(得分:6)

最有可能的是,它们正在为您提供指向构建图像并在运行中返回图像的脚本的链接,除了不允许用户使用外部图像之外没有什么可以做的,您可以做些什么,防止它的一个选择是将图像下载并存储在服务器上,而不是链接到外部图像。

- 我决定提供样品
这个图像是动态创建的,我给的网址是:http://unkwndesign.com/profilePic.png
alt text http://unkwndesign.com/profilePic.png
现在,profilePic.png是一个文件夹,当被要求提供index.php时,使用gd获取SO徽标,并在其上施加你的IP地址,在这里非常清楚我没有记录这个或任何其他数据index.php的来源是:

<?php
$image = imagecreatefrompng("http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png");
$font_size = 12;
$color = imagecolorallocate($image, 0,0,0);
ImageTTFText ($image, $font_size, 0, 55, 35, $color, "arial.ttf",$_SERVER['REMOTE_ADDR']);
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

由于我正在返回一个具有适当扩展名的图像和正确的mime-type,因此无法检测到我在做什么。 如果服务器已经下载了我的图像并将其存储在本地,那么IP地址将是服务器的IP地址,这会破坏这样做的乐趣,并且可能证明这足以阻止行为。

答案 1 :(得分:3)

尝试让GD处理这些图像。如果它抛出错误,你知道你有问题。由于图像上传是一种相对罕见的操作,因此不应该导致加载问题进行某种任意操作。

答案 2 :(得分:0)

验证图像完整性的一些最常见的做法包括检查MIME类型,或二进制读取图像的前几个字节。虽然这些并不是最好的,但是值得尝试一些来避免它们。

答案 3 :(得分:0)

您是否在谈论IE将HTML图像中的图像解释为HTML页面的问题,从而允许从用户提交的图像中注入HTML和脚本?

(即使你告诉它内容类型是一个图像/类型,IE也会这样做。微软已经引起了无数的安全灾难,试图“有帮助”。)

如果是这样,通常的解决方案是从不同的主机名提供用户提交的图像,这些主机名无法访问cookie或在您为其提供Web应用程序的主要主机名上编写脚本。

确保锁定虚拟服务器,以便图像服务器和应用服务器都只能从一个特定主机名获得(并且不能通过IP地址访问应用服务器)。

这将解决跨站点脚本问题。您可能仍然需要处理跨站点请求伪造请求,但这是一个不同的问题,可以在没有图像包装脚本注入的情况下被利用。

相关问题