Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor
Rutor


[ DDos Услуги. DDos атака. Заказать ДДос ]


Двусторонняя защита web-форм


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1
###

###

    Экзабайт

  • Advanced
  • PipPipPipPipPipPip
  • 1743 сообщений
//Шифруемся (зашита web-форм от брута(флуда))
//источник: ]]>http://hta-team.info]]>
/*
В этой статье я расскажу, как можно защититить свои веб-формы от флуда, брута, etc. (в данной статье я
буду упираться в формочку для входа куда-нибудь, т.е. авторизацию)
Сразу скажу, безопасность превыше всего, в т.ч. удобства
Я уж думаю многие пользователи обладают современными браузерами с поддержкой Javascript и не
обидятся, если мы будем эту возможность использовать для их же безопасности
Также будем использовать CSS
*/
#include <brain.h>
int main() {
В первую очередь посмотрим на нашу форму(авторизация) со стороны вани-негодяя, пусть
она будет примерно следующей:
<form method=POST>
		Login: <input type=text name=login /><br />
		Passwd: <input type=password name=passwd /><br />
		<input type=submit name=submit value=LogIn />
	</form>
Среднестатистическая форма для входа в аккаунт/админ-панель/другое(нужное подчеркнуть). Написать для неё
брут на каком-нибудь Perl или PHP - дело 2-3 минут.
Чтоб заставить васю из 7Б класса отправиться делать д/з, нужно слегка усложнить нашу форму, хотя точнее формы
Пусть будет на одной странице три формы вида:
<form method=POST class="form1">
		Login: <input type=text name=login /><br />
		Passwd: <input type=password name=passwd /><br />
		<input type=hidden name=Ohd98q0i value=L0da0s9J />
		<input type=submit name=submit value=LogIn />
	</form>
Причем третье поле будет генерироваться случайным образом и записываться в сессию.
/*Вообще сессии - очень крутая штука потому, что пользователь не может никаким образом узнать значения
переменных некой сессии*/
Также в каждой формочке, CSS-класс которой имеет вид formN, эти значения будут разными.
В сессию мы запишем и номер правильной формочки, чтоб знать, какие формы скрыть, а какую показать - за
скрытие/показ будет отвечать файл style.php, можно поставить имя style.css, но это потом.
Вот, что получилось, index.php:
<html>
<head>
<title>Adminka</title>
<link rel="stylesheet" href="style.php" type="text/css">
</head>
<body>
<?php
	session_start();
	mt_srand(time());
	if(isset($_POST['login']) && isset($_POST['passwd']) && isset($_POST['submit'])) {
		//здесь аутентификация, мы её пока опустим
	} else {
		$forma = "<form method=POST class=\"form{N}\">
	Login: <input type=text name=login /><br />
	Passwd: <input type=password name=passwd /><br />
	<input type=hidden name={var} value={value} />
	<input type=submit name=submit value=LogIn />
</form>\n"; //шаблон формы
		function randText($len) {
			//функция, возращ. строку длинной $len символов
		}
		$trueForm = mt_rand(1,3);
		for($i=1; $i<=3; $i++) {
			$tmp = str_replace("{N}", $i, $forma);
			$svar = randText(mt_rand(7,9));
			$svalue = randText(mt_rand(7,9));
			$tmp = str_replace("{var}", $svar, $tmp);
			$tmp = str_replace("{value}", $svalue, $tmp);
			if($i==$trueForm) {
				@session_register("var");
				@session_register("value");
				@session_register("form");
				$_SESSION['var'] = $svar;
				$_SESSION['value'] = $svalue;
				$_SESSION['form'] = $i;
			}
			print($tmp);
		}
	}
?>
</body>
</html>
Комментировать, собственно, нечего, даже незнающий php человек поймет этот код по оджним только названиям
функций и переменных.
Теперь создаем файл style.php. Также не забудем добавить в index.php тег <link ..> для ставки CSS
В нем будет наша "таблица стилей". Нам нужны 8 стилей: form1, form2, form3,общий form и body ,
а также еще три ложных (обложенных комментариями) стиля form1, form2, form3. FormN-стиль будет имеет вид:
form.formN {
display: block/none;
}
.. или более "наглядно":
form.formN {display: block/none;}
Обычные form и body нужны, чтоб отвести "внимание" парсера. Для этой же цели будут дополнительные form1,
form2, form3, которые мы закомментируем.
Чтоб сгенерировать такую таблицу, нам понадобятся: текущая сессия со значением правдивой формы и массив
блоков (типа, form.formN {display: block/none;})
Затем мы все это перемешаем с помощью php-функции shuffle() :
<?php
	$style = array(
		"body{font-family:Verdana} /* */ ",
		"form{border:1px solid #000} /* */ "
	); //первые два стиля
	session_start();
	if(!isset($_SESSION['form'])) die; //если "настоящая" форма не определена, то: "сценарий выпей йаду"
	$form = $_SESSION['form'];
	for($i=1; $i<=3; $i++) {
		if($form==$i) {
			$display = "block"; //настоящий стиль
			$ldisplay = "none"; //ложный стиль
		} else {
			$ldisplay = "block"; //наоборот
			$display = "none";
		}
		$style[] = "form.form".$i."{display:".$display."} /* */ ";
		$style[] = "/*form.form".$i."{display:".$ldisplay."}*/ /* */ ";
	}
	shuffle($style);
	print(join($style));
?>
Средняя защита, которая уже может отправить васю из 7б делать уроки, уже есть.
Мы использовали CSS и PHP. STOP!!... а как же Javascript (здесь улыбка Мистера Зло).
Про него мы совсем забыли. Ведь JS, как и пхп, позволяет динамически формировать свой код с помошью
функции eval(). Здесь уже можно придумать свои механизмы полиформизма, а это уже целая тема для отделной
и большой статьи. Хотя не бросать же нам такую крутую технологию.
В js символы можно отображать другим способом, использую их коды, например следующий код выведет "kolpeex":
<script>
	document.write("\u006b\u006f\u006c\u0070\u0065\u0065\u0078");
	</script>
Думаю, сразу понятно, что означает выражение \u00xx, здесь xx - hex-код символа
Теперь поправим закодируем весь код следующей функцией:
function jsencode($text) {
		$text = bin2hex($text);
		$out = "";
		for($i=0; $i<strlen($text); $i+=2) {
			$out.="\\u00".substr($text, $i, 2);
		}
		return $out;
	}
Ничего сверхестественного здесь нет )) Также не надо забывать привязавать сессию к IP
Лишь поправим основной код. Заново я его приводить не буду, справитесь сами.
Теперь можно переименовать style.php в style.css, затем создать в этой директории файл .htaccess следующего содержания:
AddType application/x-httpd-php .css

Ссылки из под хайдов не выдаю!


#2
blaga

blaga

    Килобайт

  • Honourаble
  • PipPip
  • 189 сообщений
Блин, чем так извращаться мож легче сделать по старинке с картинкой и шумами? о_О

#3
Blatnoi

Blatnoi

    Бит

  • Members
  • 5 сообщений
что ета такое я не магу его устанавит о_О
правда  с картинкой лучше

#4
iMac

iMac

    Бит

  • Members
  • 3 сообщений
imho овчинка выделки, не стоит... но с style.php идея богатая...


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных