9.
dima.london, мда, тебе как кодеру должно быть стыдно за свои слова
Начну с самого начала:
function screen($url="", $browser="ie9") {
if (!empty($url)) {
Первое: Делать проверку на пустоту переменной внутри тела функции, делая этот аргумент функции по умолчанию пустым, - это быдлокод.
Все проверки должны быть осуществлены до того как данные попали в функцию, дабы исключить пустой результат.
Ты же умышленно разрешаешь использование пустого результата в переменной $url, тем самым провацируя скрипт на проверку.
Второе: для чего был задан второй аргумент функции $browser, если он нигде не используется?
Я так понимаю он должен вставляться в адрес URL browser='.$browser Сочтём это за твою невнимательность. Идём далее:
$content=file_get_contents('http://ipinfo.info/netrenderer/index.php?url=' .$url .'&browser=ie7');
Вот ещё кусок быдлокода
Вставляя адрес из переменной $url ты забываешь экранировать данные функцией urlencode(). Привет XSS уязвимости
:
Третье: смотрим код дальше:
preg_match_all('/image.php\?imgid=(.*?)"/i', $content, $h);
Символ "." (точка) является спецсимволом регулятного выражения (совпадает с любым символом, кроме символа перевода строки) который тоже необходимо эранировать.
Использование функции preg_match_all(), для получения единичного совпадения по шаблону регулярного выражения, в данном месте не уместно. Достаточно функции preg_match()
Ну а проверка ниже меня просто убила:
Твой код:
if (isset($h) && isset($h[1][0])) {
Если регулярка сработала и совпадение нашлось то все её параметры будут заполнены.
Достаточно поместить функцию preg_match() в условие и она исключит все ненужные проверки.