防止恶意外部脚本

时间:2011-05-12 15:22:00

标签: php mysql image security bbcode

我目前正在使用PHP和MySql开发游戏。 我想让用户能够使用BBCode解析器(NBBC)显示图像,但我已经意识到潜在的安全问题。

请允许我解释一下:

  1. 用户使用[img] http://example.com/image1.png [/ img]

  2. 等代码在textarea框中输入网址
  3. 然后,用户可以将外部服务器上的image1.png编辑为存储用户信息(ip ect)等的服务器端脚本。

  4. 用户使用信息做一些可能令人讨厌的事情!

  5. 我的问题是,在使用外部资源进行详细设计时,我们如何防止这种情况发生并保护用户详细信息?

    显而易见的答案是只允许上传到您的网站,但在这种情况下,这似乎并不太实际。

    感谢任何帮助!

6 个答案:

答案 0 :(得分:5)

实际上你可以通过改变

[img]http://example.com/image1.png[/img] 

成像:

<img src="http://yourserver/proxy.blah?url=example.com/image1.png" />

这样您的代理就会加载图片而不是用户。

答案 1 :(得分:3)

你不能因为你的剧本它看起来像一个真实的图像,没有办法检测到任何不同的东西。

任何团体都可以使用.htaccess / ForceType来更改任何文件的执行类型,获取用户信息并提供响应的图像。

我写了一个简单的脚本,用于在许多月前在用户论坛签名中旋转图像,并演示了这个过程:http://blog.simonholywell.com/post/374221718/flickering-images

答案 2 :(得分:2)

你没有。

恶意用户能够获得的唯一信息是用户的IP地址和引荐来源URI,因此您只需确保没有任何有价值的信息传输,(例如会话ID,您可以绑定到IP地址或通过cookies转移。)

答案 3 :(得分:2)

甚至没有必要将该图像转换为脚本。远程服务器的访问日志将捕获图像请求,就像捕获服务器的任何其他请求一样。 IP,浏览器UA,引用等...

如果您在用户提供的数据中允许外部资源,则无法控制这些资源的处理方式。如果这张图片是阿凡达(比如说),那么没有任何东西说远程用户最初不能让他们的头像成为小狗,然后在最初的小狗图片获得批准后将其更改为令人讨厌的东西。

没有人说用户无法将头像URL指向他们自己不拥有的服务器,在这种情况下,其他服务器的操作员会因带宽被盗而烦恼并将头像图片变成Goatse类型的图像回到带宽窃贼那里。

简而言之,如果您允许外部资源,则会失去控制权。把所有东西放在家里,你可以密切关注它。

答案 4 :(得分:2)

尽管回应说这不是问题,但确实如此。有几种方法可以创建在用户PC上执行的恶意图像文件。您也无法控制用户的浏览器是否会遵循第三方服务器返回的MIME类型,因此它可能会返回可执行文件而不是图像,即使您可能只允许链接到带有图像扩展名的文件(.png ,. gif,.jpg等)。该交互完全在您的用户和第三方服务器之间,但由于它嵌入在您的页面中,因此用户体验将是来自您网站的任何感染。

但即使假设远程服务器只发送图像,您也不知道图像是否安全。请参阅:
gifar image vulnerability
Infected .png files
Malicious code hides in jpgs

将图片上传到您的网站也不是在公园散步,as discussed here

答案 5 :(得分:0)

  

用户使用信息做一些可能令人讨厌的事情!

你在这里过于偏执。如果用户只是知道他们的IP是易受攻击的,那么他们的机器已经充斥着一百种不同的恶意软件。