Задать вопрос
  • Защита от отправки POST запроса со стороннего сайта

    MonkAlbino
    @MonkAlbino
    Фронтенд разработчик
    Я так понимаю, что вам надо запретить отправку POST'ом данных из всех форм, кроме расположенной у вас на сайте.
    @SpaceBike выше почти правильно вам указал, что сделайте скрытое поле, значение которого будет генерироваться PHP в зависимости от пришедших параметров пользователя (HTTP-заголовки, Cookie, User-Agent и т.д.). Туда же можно добавить некую "соль" - случайно сгенерированный параметр, но его надо будет хранить, чтобы использовать потом.
    В форму:
    <input
    	type='hidden'
    	name='security'
    	value='<?php
    		echo md5(
    			$_SERVER['REMOTE_ADDR'] .
    			$_SERVER['HTTP_USER_AGENT']
    		);
    	?>'
    />

    В обработчике POST-запросов:
    <?php
    	$valid = md5(
    			$_SERVER['REMOTE_ADDR'] .
    			$_SERVER['HTTP_USER_AGENT']
    		);
    	if($POST['security'] == $valid) {
    		// хороший
    	} else {
    		// плохой
    	};
    ?>


    Таким образом, чтобы отправить POST-запрос с внешнего сайта или автоматическим скриптом, им надо будет эмулировать браузер: скачать страницу с вашего сайта, взять скрытые параметры (их может быть несколько) и отправлять свои запросы с ними. На моей практике 95% автоматических скриптов этого не делают. Понятно, что это не идеальная панацея. Можно добавить некий скрытый параметр через Javascript, тоже каким-нибудь мудрёным алгоритмом. Автоматика вряд ли будет исполнять js в момент скачивания, а если будет, то защищаться надо будет другой проверкой на робота.
    Ответ написан
    Комментировать