Чтение RSS каналов

Форум

Открыть Ответить

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

0

0
1
12.03.2010 00:24:4912.03.2010 00:50:16

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

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

&lt;form action=&#039;action.php&#039; enctype=&#039;multipart/form-data&#039; method=&#039;post&#039;&gt;<br /> &lt;input name=&#039;primer&#039; type=&#039;text&#039; value=&quot;12345&quot;&gt;<br /> &lt;/form&gt;

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

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

3.92

3.92
2
12.03.2010 00:38:0212.03.2010 00:47:38

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

код из системы SLAED Смайл - 05 Смайл - 02:

$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
ни фига подгрузить не смогут

4.05

4.05
3
12.03.2010 00:45:1312.03.2010 00:46:13

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

3.92

3.92
4
12.03.2010 00:46:4712.03.2010 00:50:16

я же сказал я еще сплю поэтому за себя не ручаюсь Смайл - 02
ща пол часика поготь я кофе наверну для соображалки Смайл - 06


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

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

4.05

4.05
5
12.03.2010 00:58:4412.03.2010 00:59:00

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

3.92

3.92
6
12.03.2010 01:40:0412.03.2010 01:54:55

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

пишем в function.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'], это количество символов в "сале".

при необходимости в нужных модулях можно так же добавить в настройки опцию вкл/выкл защиту. использование новшества выглядит примерно следующим образом:
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();
}


реализовано на Кино для КПК Смайл - 02

3.69

3.69
7
12.03.2010 09:41:5712.03.2010 09:43:59

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

3.92

3.92
8
12.03.2010 22:04:45

Мысли у всех иссякли чтоли?
Или все шарящие в даун ушли? Смайл - 06

3.92

3.92
9
14.03.2010 21:21:04

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

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

3.91

3.91
10
14.03.2010 22:59:56

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

3.92

3.92
Открыть Ответить
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь