Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 url或内容作为页面标题中的变量_Php_Image_Header - Fatal编程技术网

Php url或内容作为页面标题中的变量

Php url或内容作为页面标题中的变量,php,image,header,Php,Image,Header,我正在设计一个网站,在我的页面上显示各种形式的外部链接。我正在使用 $url=$_GET['url']; $website_data = file_get_contents($url); echo $website_data; 因此,用户基本上会点击一个类似于www.test.com/display\u page.php?url的超链接=http://www.xyz.com/article/2.jpg 我的页面,list_of_images.php,通常有一个图像列表,页面上的每个图像都带有h

我正在设计一个网站,在我的页面上显示各种形式的外部链接。我正在使用

$url=$_GET['url'];
$website_data = file_get_contents($url);
echo $website_data;
因此,用户基本上会点击一个类似于
www.test.com/display\u page.php?url的超链接=http://www.xyz.com/article/2.jpg

我的页面,list_of_images.php,通常有一个图像列表,页面上的每个图像都带有href,当单击任何图像时,它将显示_page.php,这将在页面顶部显示我们的横幅,一些文本,然后在下面显示此图像。此图像可以来自任何网站


我目前直接发送url,并使用GET抓取它。我知道用户/黑客实际上可以对url变量进行一些编码和发送命令,可能会破坏服务器或做一些有害的事情,因此我希望避免使用这种方法或直接在标题中发送url。解决此问题的替代方法是什么?

安全的方法是使用存储在数组或数据库中的固定资源集,并使用适当的键作为参数

$ress = Array('1' => 'http://www.google.com/', ...);

$res = $ress[$_GET['res']];

我会确保url以
http://
https://
开头:

if(preg_match("`^https?://`i", $_GET['url']))
// do stuff
您可能还需要确保它没有指向任何内部位置:

if(preg_match('`^https?://(?!localhost|127\.|192\.|10\.0\.)`i', $_GET['url']))
// do stuff
你可以选择一种更优雅的主机黑名单方法,而不是一个大而脏的正则表达式,但你明白我的意思…

试试POST


尝试使用POST方法进行此操作

谢谢您的回复。我不能使用数据库或数组,因为图像和url每分钟都在动态变化。即使它们每秒钟都在变化,我也不明白为什么不能使用数据库。@Scorpion King:唯一的另一种方法是只允许相对url,并非常小心地清理它们,以免允许
/
。确保它与以下内容匹配:
/^[a-z0-9-\+\(jpg | jpeg)$/i
@Scorpion King:但无论如何,最好还是按照@Ignacio所说的去做,并保持一个固定的设置。布景如何变化?您是否更改了它,或者您对它有任何控制权?@Ignacio:对于这个项目,我们没有任何数据库设置,也不想使用。