Здравствуйте! У меня проблема с проверкой веденного поля login и password. Проблема еще возникла в октябре прошлого года, тогда в мой сайт проникали люди с sql инъекцией. Но хорошо что подсказали как исправить ошибку и проблема не возникала, до этого времени, опять начали взламывать. Сайт обычный, но там выкладываются эксклюзивная информация о финансах и финансировании. Помогите кто сможет, вот код: Код (Text): session_start(); if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} } if (empty($login) or empty($password)) { exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Вы ввели не всю информацию, вернитесь назад и заполните все поля!</p></center></h3>"); } $login = stripslashes($login); $login = htmlspecialchars($login); $password = stripslashes($password); $password = htmlspecialchars($password); $login = trim($login); $password = trim($password); include ("base.php"); $ip=getenv("HTTP_X_FORWARDED_FOR"); if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); } mysql_query ("DELETE FROM error WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900"); $result = mysql_query("SELECT col FROM error WHERE ip='$ip'",$db); $myrow = mysql_fetch_array($result); if ($myrow['col'] > 2) { exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.</p></center></h3>"); } $password = md5($password); $password = strrev($password); $password = $password."b3g23"; $result = mysql_query("SELECT * FROM table WHERE login='$login' AND password='$password'",$db); $myrow = mysql_fetch_array($result); if (empty($myrow['id'])) { $select = mysql_query ("SELECT ip FROM error WHERE ip='$ip'"); $tmp = mysql_fetch_row ($select); if ($ip == $tmp[0]) { $result52 = mysql_query("SELECT col FROM error WHERE ip='$ip'",$db); $myrow52 = mysql_fetch_array($result52); $col = $myrow52[0] + 1; mysql_query ("UPDATE error SET col=$col,date=NOW() WHERE ip='$ip'"); } else { mysql_query ("INSERT INTO error (ip,date,col) VALUES ('$ip',NOW(),'1')"); } exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Извините, введённый вами логин или пароль неверный.</p></center></h3>"); } echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>"; Может как то в pdo сделать, я сам в pdo пока ноль.
PDO и подготовленные запросы!!! не чего сложного в ПДО нет! все просто до ужаса! ну а так я даже не знаю что вам подсказать! конкретней в чем трабл? используй mysql_real_escape_string
ainur777, у тебя правда код такой — без отступов? плоский как фотомодель. Добавлено спустя 1 минуту 3 секунды: видимо ты копировал его с форума и так ничего своего и не добавил. тут нет никакой защиты от инъекции. пока будешь тупо копировать не вникая, будут тебя ломать.
Спасибо! Добавлено спустя 39 секунд: Да код скопировал с сайта ruseller, но и добавил свой. Добавлено спустя 3 минуты 32 секунды: А как лучше защитить от sql инъекции?
Для вывода strip_tags, для запроса в бд mysql_real_escape_string. Для записи числовых значений используйте функции приведения к типу (int), (float) и проч.
Нафига? Зачем вообще порчу данных устраивать? Ну ввел человек теги, так покажи ему то, что он ввел - теги, пропущенные через htmlspecialchars(). А то вот так копипаст-кодеру ты совет даешь, а он, думаешь, будет в доки лезть и читать? Смотреть, что ему дают? Потом будет писать посты "не могу достать теги из БД, помогите!!!".