防止直接访问用作图像的php文件

防止直接访问用作图像的php文件,php,Php,这里有一个有趣的例子,我试图阻止直接访问PHP文件 通常,我会在顶级文件中定义一个变量,包含的文件会检查它是否设置为阻止它 但是,此特定PHP文件作为图像包含,如中所示: <img src="/includes/youtube_image_proxy.php?id=12" /> 所以,通常的方法实际上不起作用,有没有办法解决这个问题?使用$\u SERVER[“HTTP\u REFERER”]查看是否从您的网站调用了该文件 就像在yourwebsite.com/link/fil

这里有一个有趣的例子,我试图阻止直接访问PHP文件

通常,我会在顶级文件中定义一个变量,包含的文件会检查它是否设置为阻止它

但是,此特定PHP文件作为图像包含,如中所示:

<img src="/includes/youtube_image_proxy.php?id=12" />

所以,通常的方法实际上不起作用,有没有办法解决这个问题?

使用$\u SERVER[“HTTP\u REFERER”]查看是否从您的网站调用了该文件

就像
yourwebsite.com/link/file.html
上一样,引用者将是
yourwebsite.com


如果我将同一个图像文件放在我的
网站.com/link/filebeta.html
上,它将无法工作,因为您正在referer上进行测试

浏览器必须直接访问它才能获得图像。为什么要阻止访问它?如果您解释一下,HTTP没有“直接访问”的概念,它基本上是无状态的,那么就有可能实现您的真正目标。常见的解决方法包括Referer检查或会话cookie状态(古怪和不可靠)。你应该有一个比假设的外部引用更可靠的理由。通过会话实现检查是最简单的方法,但需要用户接受会话cookie。(除非您希望将会话ID作为GET参数附加到图像URL,但出于安全原因,通常不建议这样做。)另一种方法是传递时间戳值,然后仅在时间戳不超过x分钟或其他时间时才允许请求。发送该时间戳的散列和只有您知道的秘密值,以避免操纵。[…][…]当然,如果用户保存了页面的HTML代码,然后稍后再次尝试查看,那么图像将不会加载,因为时间戳太旧。为什么?为什么要在页面中显示图像,但不让用户单独访问?这很容易被欺骗: