Форум » Система построения сайтов » Защита системы » Защита формы от подмены полей
Открыть Ответить

Защита формы от подмены полей

0

0

1
12.03.2010 00:24:49 12.03.2010 00:50:16

Коллеги, нужен совет по защите формы от подмены полей.
Если на пальцах, то нужно примерно следующее:

1. Есть обычная форма содержащая N-количество полей, допустим такой простейший код:

Код
<form action='action.php' enctype='multipart/form-data' method='post'>
<input name='primer' type='text' value="12345">
</form>

2. Необходимо защить эту форму от запуска с другого домена или доступа через CURL, проще говоря, чтобы не смогли подделать саму форму и содержимое полей и обработать форму на другом домене.

Что-то ни чего кроме ввода скрытого поля с сессией и его проверки после отработки формы не приходит на ум!
Кто что подкинет, какую идею?

GRAFLEKX
GRAFLEKX
3.92

3.92

2
12.03.2010 00:38:02 12.03.2010 00:47:38

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

код из системы SLAED 😃 😛:

PHP
$host = (getenv("HTTP_HOST")) ? getenv("HTTP_HOST") : getenv("SERVER_NAME");
if (!intval($_FILES['Filedata']['size']) && !stristr(getenv("HTTP_REFERER"), $host)) header("Location: index.php?error=404");

в этом случае на другом хосте кроме страницы index.php?error=404
ни фига подгрузить не смогут


[Koshey-Developer](https://kosheydemo.info/)

ZOMBiE
ZOMBiE
4.05

4.05

3
12.03.2010 00:45:13 12.03.2010 00:46:13

ZOMBiE, 😄 ну не смеши меня, я уже на сессии замахнулся, а ты мне рефера и хост рисуешь - это защита от идиотов.
Я о серьезной защите говорю.
Мне не важно подгрузят форму на другом хосте или нет, мне важно чтобы эта форма НЕ смогла отработать на том хосте и послать результаты мне.
Тоесть реально могут скопировать код формы, заменить значение полей и послать результат отработки формы на мой хост - мне нужно как раз от этого защититься, чтобы хост умел различать родная это форма или поддельная.

GRAFLEKX
GRAFLEKX
3.92

3.92

4
12.03.2010 00:46:47 12.03.2010 00:50:16

я же сказал я еще сплю поэтому за себя не ручаюсь 😛
ща пол часика поготь я кофе наверну для соображалки 😄

даже адрес нормально набрать не смог =))))
вот те и результат 😃 😃 😃 http://www.slaed.net/forum-view-9069-last.html

не надо по ночам кодить ото будете как я, меня утром жена будет а я ей переменная гет равна =)))))))


[Koshey-Developer](https://kosheydemo.info/)

ZOMBiE
ZOMBiE
4.05

4.05

5
12.03.2010 00:58:44 12.03.2010 00:59:00

Да это не к спеху, просто советы нужны, как это провернуть половчее, чтобы потом даже самому небыло желания пытаться подделать.
Форма не простая - платежный интерфейс, вот поэтому и думаю-сочиняю...

GRAFLEKX
GRAFLEKX
3.92

3.92

6
12.03.2010 01:40:04 12.03.2010 01:54:55

думаю "сало" тут как раз поможет так же, как и вообще от ботов. у меня сделано примерно так...

пишем в function.php две простенькие хункции:

PHP
function get_salt($use=1){
	if($use){
		if(!isset($_SESSION['salt'])) set_salt();
		return $_SESSION['salt'];
	}else return '';
}

function set_salt($use=1){
	global $conf;
	if($use) $_SESSION['salt'] = gen_pass(mt_rand($conf['salt_min'], $conf['salt_max'])).'_'.mt_rand(0, 9);
}

где $conf['salt_min'] и $conf['salt_max'], это количество символов в "сале".

при необходимости в нужных модулях можно так же добавить в настройки опцию вкл/выкл защиту. использование новшества выглядит примерно следующим образом:

PHP
include('config/conf_module.php');
function show_form(){
global $conf, $conf_module, $stop;

$salt = get_salt($conf_module['salt']);

head();
open();
if($stop) echo $stop;
echo '<form method="post" action="index.php"><div>
<input type="text" name="'.$salt.'title" />
<input type="text" name="'.$salt.'mail" />
<input type="hidden" name="name" value="'.$conf['name'].'" />
<input type="hidden" name="op" value="send_form" />
<input type="submit" value="Send" />
</div></form>';
close();
foot();
}
function send_form(){
global $conf, $conf_module, $stop;

$salt = get_salt($conf_module['salt']);

$title = text_filter($_POST[$salt.'title']);
$mail = text_filter($_POST[$salt.'mail']);

set_salt($conf_module['salt']);

if(!$title || !$mail) $stop = 'Error!';
if(!$stop) echo 'TITLE = '.$title.'; MAIL = '.$mail;
else show_form();
}

реализовано на Кино для КПК 😛

Алексей
Алексей
3.69

3.69

7
12.03.2010 09:41:57 12.03.2010 09:43:59

спасибо, Алексей, попробую.
В принципе как я и мыслил - применять сессии.
Может еще какие-то идеи есть, кроме сессии?

GRAFLEKX
GRAFLEKX
3.92

3.92

8
12.03.2010 22:04:45

Мысли у всех иссякли чтоли?
Или все шарящие в даун ушли? 😄

GRAFLEKX
GRAFLEKX
3.92

3.92

9
14.03.2010 21:21:04

GRAFLEKX, не, тут надо так:
Все дауны иссякли, при виде таких мыслей 😃

Идея Алексея , кстати, понравилась. Чем не выход?

sam07
sam07
3.91

3.91

10
14.03.2010 22:59:56

sam07, да эта идея и мне пришла в голову буквально сразу - использовать сессии для проверки целостности формы, только у меня всё гораздо проще.
Я просто собирал, так сказать, идеи, как можно еще это осуществить.
Ну не может быть, чтобы вся защита базировалась только на сессиях (хотя в надежности я не сомневаюсь), должно быть еще что-то, только это что-то я ни как не придумаю.
Возможно я пытаюсь изобрести велосипед. 🙄

GRAFLEKX
GRAFLEKX
3.92

3.92

Открыть Ответить
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр