URL или содержимое в качестве переменной в заголовке страницы - PullRequest
0 голосов
/ 21 декабря 2010

Я разрабатываю сайт, где на моей странице показываются внешние ссылки.Я использую

$url=$_GET['url'];
$website_data = file_get_contents($url);
echo $website_data;

, поэтому, по сути, пользователь нажимает на гиперссылку, которая выглядит примерно так: www.test.com/display_page.php?url=http://www.xyz.com/article/2.jpg

Моя страница, list_of_images.php, обычно содержит список изображений с href длякаждое изображение, как указано выше на странице, и при нажатии любого изображения оно будет отображаться в display_page.php, где будет отображаться наш баннер в верхней части этой страницы, некоторый текст, а затем это изображение под ним.Это изображение может быть с любого сайта.

В настоящее время я посылаю URL-адрес напрямую и получаю его с помощью GET.Я понимаю, что пользователи / хакеры могут на самом деле выполнять некоторое кодирование и отправлять команды для переменной url и могут сломать сервер или сделать что-то вредное, поэтому я хотел бы избежать этого метода или посылать URL-адрес непосредственно в заголовок.Каков альтернативный подход к этой проблеме?

Ответы [ 3 ]

1 голос
/ 21 декабря 2010

Безопасный подход заключается в использовании фиксированного набора ресурсов, хранящихся в массиве или базе данных, и соответствующего ключа в качестве параметра.

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

$res = $ress[$_GET['res']];
0 голосов
/ 21 декабря 2010

Попробуйте POST ....

Попробуйте сделать это, используя метод POST

0 голосов
/ 21 декабря 2010

Я хотел бы убедиться, что 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

Вместо большого грязного регулярного выражения, вы могли бы пойти на более элегантный подход к черному списку хостов, но вы меня поняли ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...