Фильтрация переменных и проблема с кодировкой

1. Андрей (10.01.2010 / 14:47)
Вот небольшой кусок кода...
<?php
echo '<br /><form method="post" action="reg.php" >';
echo 'Логин: <br /><input name="login" maxlength="32" /><br />';
echo 'Пароль: <br /><input type=password name="passw" maxlenght="32" /><br />';
echo '<br /><input value="Регистрация" type="submit" /></form>';
$login = $_POST['login'];
$passw = $_POST['passw'];
$sql = 'INSERT INTO `users` (`login`, `passw`) VALUES ("'.$login.'", MD5("'.$passw.'"))';
$res = mysql_query($sql);
?>
Вот как мне тут отфильтровать переменные? чтоб никаких кодов и прочей ерунды не пускало а только латинские и кирилические буквы и некоторые знаки...
И еще одна проблема! При вводе кирилицы в таблице всякие каракули... как кодировку при вводе получить UTF-8?

2. Андрей (10.01.2010 / 14:55)
ааа... и еще профильтровать на длину) а то гдето читал что ограничения в инпутах както обходица... правдо мало верица... но всёже для общего знания пригодица)

3. ктулху (10.01.2010 / 15:11)
Ограничения в импутах легко обходятся...
<?php
if(strlen($login)>15 || strlen($passw)>15) {
	echo "Пароль или логин больше 15 символов";
} else {
	if(!eregi('^[a-z0-9\-]+$',$login) || !eregi('^[a-z0-9\-]+$',$passw)) {
		echo "Пароль или логин содержат недопустимые символы";
	} else {
		$sql = 'INSERT INTO `users` (`login`, `passw`) VALUES ("'.$login.'", MD5("'.$passw.'"))'; 
		$res = mysql_query($sql);
	}
}
?>


4. Игорь (10.01.2010 / 15:11)
$names = substr($HTTP_POST_VARS["names"],0,32);
это для фильтрации длины..Думаю разберешьсяч=) Длина редакчеться заменой цифры 0.32 Это (если я не путаю) значит что макс 32 символа

5. Игорь (10.01.2010 / 15:12)
3. ShiftBHT, Ну можно и так=))

6. Андрей (10.01.2010 / 15:15)
3. ShiftBHT, вооо) точто надо) спс

7. ктулху (10.01.2010 / 15:18)
<?php
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='cp1251'");
mysql_query("SET character_set_results='utf8'");
?>
Вот такую штуку попробуй после конекта к БД прописать

8. Андрей (10.01.2010 / 15:34)
7. ShiftBHT, вооо) отлично) пашет теперь всё) спасибо огромное) с меня плюс) через пару часов)
тема офф

9. Андрей (10.01.2010 / 17:11)
а нет не офф)
еще при включоном:
<?php
$act = $_GET['act'];
?>
дыра получается...
чтото вроде етим латают:
<?php
$act=htmlspecialchars(stripslashes(trim($act)));
$act=eregi_replace('"',"",$act);
$act=eregi_replace("[,{}+'$%`^&*%;]","",$act);
?>
но не уверен, потому что непонимаю покачто что делает такой код sad подскажите мошт где прочитать или объясните малясь)

10. Андрей (10.01.2010 / 17:13)
вернее не понимаю ету строчку:
<?php
$act=htmlspecialchars(stripslashes(trim($act)));
?>


11. ктулху (10.01.2010 / 17:16)
Ну... я обычно делаю так:
<?php
$act=$_GET['act'];
$actions=array('view', 'add', 'del');  #Короче доступные действия
if(!in_array($act, $actions)) {
	echo "Попытка взлома, действие не найдено";
	exit();
}
?>


12. ктулху (10.01.2010 / 17:18)
АнДрЮхХха (Сегодня / 19:13)
вернее не понимаю ету строчку:
<?php
$act=htmlspecialchars(stripslashes(trim($act)));
?>
stripslashes(); - Экранирует кавычки
htmlspecialchars(); - Экранирует спец символы

13. Удаленный (10.01.2010 / 17:22)
htmlspecialchars - преобразует спец символы в объекты HTML, например & - &amp;
stripslashes - удаляет экранирующие бэкслэши;
trim - удаляет все пробелы в начале и в конце строки.

14. ктулху (10.01.2010 / 17:29)
13. Vetas, добавлю что trim() удаляет двойные пробелы, вернее оставляет всего 1 =)

15. Андрей (10.01.2010 / 17:37)
11. ShiftBHT, а всё догнал) долго думал))
14. ShiftBHT, ааа... тип как тут в сообщениях тож фильтруюца от пробелов)
PS с етими stripslashes(); htmlspecialchars(); щас попробую разобраться...

16. Андрей (10.01.2010 / 18:21)
а всё с етими тоже понял...
htmlspecialchars(); попросту преображает любые символы какого либо кода просто в текст по HTML... хорошо пойдет для фильтрации введенного в форму текста...
stripslashes(); из названия понятно что слеши заменяет кавычками...
теперь уж точно всё) спасибо)

URL: https://visavi.net/topics/4761