Уязвимости в системе безопасности, связанные с получением содержимого файла() с использованием переменного местоположения


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

Что-то вроде этого:

$generatedCode="9s8dfOJDFOIesdsa";
$url="http://anyDomainGivenByUser.com/verification.txt";

if(file_get_contents($url)==$generatedCode){
//verification complete!
}

Существует ли какая-либо угроза наличия предоставленного пользователем URL-адреса для file_get_contents()?

Изменить: Приведенный выше код является лишь примером. Сгенерированный код, очевидно, немного более сложный, но все же просто строка.

Author: kmoney12, 2013-07-15

1 answers

Да, это может быть Уязвимость для подделки запросов на стороне сервера - если $url является динамическим, вы должны проверить, что это внешний интернет-адрес, и схема определяет протокол HTTP или HTTPS. В идеале вы должны использовать только протокол HTTPS, а затем проверить сертификат, чтобы защититься от любых возможностей перехвата DNS.

Если $url управляется пользователем, они могут заменить внутренние IP-адреса и исследовать сеть за брандмауэр, использующий ваше приложение в качестве прокси-сервера. Например, если они установят хост в $url на 192.168.123.1, ваш скрипт запросит http://192.168.123.1/verification.txt, и они смогут убедиться, что другая машина находится в размещенной среде из-за различий во времени отклика между действительными и недействительными внутренними адресами. Это известно как Временная атака. Это может быть сервер, который вы, возможно, не захотите выставлять на всеобщее обозрение. Конечно, это вряд ли приведет к атаке на вашу сеть изолированно, но это является формой Утечки информации и может помочь злоумышленнику перечислить вашу сеть, готовую к другой атаке.

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

File_get_contents сам по себе кажется безопасным, так как он извлекает URL-адрес и помещает его в строку. Как пока вы не обрабатываете строку в каком-либо механизме сценариев или не используете ее в качестве любого параметра выполнения, вы должны быть в безопасности. file_get_contents также можно использовать для извлечения локального файла, но если вы подтвердите, что это действительный URL-адрес HTTP, подключенный к Интернету, как описано выше, эта мера должна предотвратить чтение локальных файлов, если вы решите показать пользователю, что verification.txt содержится в случае несоответствия. Кроме того, если вы хотите отобразить содержимое verification.txt в любом месте вашего сайта, вы должны убедиться, что вывод правильно закодировано для предотвращения XSS.

 5
Author: SilverlightFox, 2015-02-27 09:37:39