使用$_GET for path显示图像是否安全?


Is it safe to display a image using $_GET for path?

使用$_GET for path显示图像是否安全?例如使用以下格式:image.php?path=/images/example.jpg

可以,只要确保使用isset就不会抛出未定义索引如果有人篡改了你的URL,你还需要检查路径是否有效否则显示其他图像,比如在alt属性

中写入文本无法找到图像
if(isset($_GET['index'])) {
   echo '';  
}

查找点:-

  • 任何人都可以修补URL
  • 必须对
  • 值进行消毒
  • 通常路径会改变,所以如果没有找到图像,请确保使用alt文本
  • 如果不进行杀毒,将导致黑客容易入侵

总之,我建议你不要这样做

如果您在文件名上使用basename($_GET['path'])后检查路径存在,那么它是完全安全的,还定义了images文件夹的路径。

然后检查它是getimagesize($path)的图像。如果失败,将文件名更改为未找到的图像或类似的。

<?php 
$path_to_images = '/images/';
$not_found_img  = './path/to/not_found_image.jpg';
// check path is set and not empty
if(empty($_GET['path'])){
    $path = $not_found_img;
}else{
    $path = $path_to_images.basename($_GET['path']);
    // check that image exists
    if(!file_exists($path)){
        $path = $not_found_img;
    }else{
        //Check if image
        if($img_size = getimagesize($path)) {
            //alls good $path validated
        }else{
            $path = $not_found_img;
        }
    }
}
// do somthing with your $path
?>

完全可以。没有问题,黑客不能给那里坏代码,什么可以破解你的页面或工作与你的数据库。但是要注意其他元素