2017-02-06 19 views
0

Есть ли способ распознать, был ли запущен входящий запрос POST программным путем через cURL или является обычным запросом POST для HTML?Определить между запросом cURL POST и обычным POST-запросом в PHP

Могу ли я различать два в PHP, чтобы установить конкретное условие?

+0

Определить «нормальный». – CBroe

+0

Запрос POST, инициированный браузером клиента, а не отправленный через cURL с сервера? – Mirian

+0

Нет ничего «ненормального» ни о том, ни о другом. И если через cURL кто-то отправит одни и те же заголовки запросов в качестве браузера, тогда вы не сможете различить их между собой (из-за их _identical_). В большинстве случаев вы можете проверить типичные заголовки/значения, отправляемые браузером (например, User-Agent, различные заголовки Accept ... заголовки и т. Д.) И на основе этой попытки и угадывать (!), Если вы имеете дело с реальным браузером или нет. – CBroe

ответ

0

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

если вы имеете в виду curl, да, это легко. UserAgent по умолчанию локон/versionumber (в моей системе прямо сейчас его curl/7.52.1)

if(1===preg_match('/^curl\/[\.\d]+/',$_SERVER['HTTP_USER_AGENT']??'')){ 
//curl's user-agent string. probably curl 
} else { 
//could be anything (including curl, perhaps with a masked user-agent) 
} 

регулярное выражение может быть даже излишним, может быть, вы могли бы просто сделать 0===strpos('curl/',$_SERVER['HTTP_USER_AGENT']??'')

интересное замечание, что завиток не будет выполнять JavaScript , поэтому, если вы добавите тег ввода (скрытый?) с javascript, завиток проигнорирует его. как jsInputTag=document.createElement("input");jsInputTag.setAttribute("name","jsInputTag");document.getElementById("form").appendChild(jsInputTag);

локон не добавит jsInputTag в виде (ничто не мешает программисту добавлять его вручную, хотя.)

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

Кстати, если это проблема X-Y, и вам действительно нужна защита от автоматических скриптов, вы должны использовать капчу, а не пытаться обнаружить завиток. например: ReCaptcha