Фильтрация переменных и проблема с кодировкой
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);
?>
но не уверен, потому что непонимаю покачто что делает такой код
подскажите мошт где прочитать или объясните малясь)
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, например & - &
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