Проверить реферер? - PullRequest
       6

Проверить реферер?

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

У меня проблема.У меня есть этот код:

$theUrl = $_GET["url"];
include("$theUrl.php");

Это получает URL, например: http://mywebsite.com/index.php?url=test

Но что если кто-то вставит:

http://mywebsite.com/index.php?url=http://theirwebsite.com/someEvilscript

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

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

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

Например:

<?php
$allowed = array('file1', 'file2', 'file3');

if (in_array($_GET["url"], $allowed)) {
    // You can include
} else {
   // Error message and dont include
}
?>

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

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

Почему бы вам просто не создать test.php на своем сайте и не использовать http://mywebsite.com/test.php в ссылке?Таким образом, вы можете при необходимости включить ваш скрипт инициализации в test.php (и в другие скрипты).

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

У вас действительно не должно быть кода, который выглядит так. И я имею в виду на самом деле. Чего вы пытаетесь достичь с этим? Я уверен, что есть другой путь к тому же без рисков (и скажем, общее уродство).

Как подсказывает HoLyVieR, внесение в белый список того, что можно включить, является ключом к обеспечению безопасности вашего текущего кода.

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