Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止恶意外部脚本_Php_Mysql_Image_Security_Bbcode - Fatal编程技术网

Php 防止恶意外部脚本

Php 防止恶意外部脚本,php,mysql,image,security,bbcode,Php,Mysql,Image,Security,Bbcode,我目前正在使用PHP和MySql开发一个游戏。 我希望用户能够使用BBCode解析器()显示图像,但我已经意识到了一个潜在的安全问题 请允许我解释: 用户使用[img]等代码在文本框中输入URLhttp://example.com/image1.png[/img] 然后,用户可以将外部服务器上的image1.png编辑为存储用户信息(ip ect)等的服务器端脚本 用户使用信息做一些可能令人讨厌的事情 我的问题是,我们如何防止这种情况发生,并在使用外部资源进行详细说明时保护用户的详细信息 显而易

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

请允许我解释:

  • 用户使用[img]等代码在文本框中输入URLhttp://example.com/image1.png[/img]

  • 然后,用户可以将外部服务器上的image1.png编辑为存储用户信息(ip ect)等的服务器端脚本

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

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

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

    谢谢你的帮助

    你没有


    恶意用户能够获得的唯一信息是用户的IP地址和引用方URI,因此您只需确保它不会传输任何有价值的信息(如会话id,您可以将其绑定到IP地址或通过cookie传输)。

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

    如果允许在用户提供的数据中使用外部资源,则无法控制这些资源的处理方式。如果这张图片是针对一个化身的(比如说),那么没有任何东西表明远程用户最初不能将他们的化身变成一只小狗,然后在最初的小狗图片被批准后再将其更改为令人讨厌的东西

    没有任何东西表明用户不能将化身URL指向他们自己不拥有的服务器,在这种情况下,其他服务器的运营商会对带宽盗窃感到恼火,并将化身图片制作成Goatse类型的图像,以取回带宽盗窃者


    简而言之,如果你允许外部资源,你就会失去控制。把所有的东西都放在家里,这样你就可以对它进行监视。

    你不能这样做,因为对你的脚本来说,它看起来像一幅真实的图像,而且没有办法检测到任何不同的东西

    任何主体都可以使用.htaccess/ForceType更改任何文件的执行类型,获取用户信息并提供一个映像作为响应


    许多月前,我在一个用户论坛签名中编写了一个旋转图像的简单脚本,它演示了这个过程:

    实际上,您可以通过更改

    [img]http://example.com/image1.png[/img] 
    
    变成类似于:

    <img src="http://yourserver/proxy.blah?url=example.com/image1.png" />
    
    
    
    这样,您的代理将加载图像而不是用户

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


    你太偏执了。如果一个用户仅仅知道自己的IP就容易受到攻击,那么他们的机器上就已经有上百个不同的恶意软件。

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

    但即使假设远程服务器只发送一个映像,您也不知道映像是否安全。请参阅:



    将图像上传到您的站点也不是一件轻松的事,.

    关于服务器日志的观点很好。我甚至没有想到一个较低的级别!+1并在向用户提供服务之前验证您上传的内容。我不是说“查看它”而是扫描恶意的、可执行的图像文件。这样用户请求头就不会暴露出来。@haknick谢谢。我已经看到了你的答案。事实上,在你在这里发表评论之前,我进行了编辑以使其更易于阅读!:-)最安全的方法是使用一些经过验证的图像处理软件加载和保存上传的文件,这样您就知道您正在为用户提供一个真实的图像文件,因为它是您创建的。