За последние 24 часа нас посетил 19081 программист и 1635 роботов. Сейчас ищут 888 программистов ...

Проблема с проверкой введенных данных

Тема в разделе "Прочие вопросы по PHP", создана пользователем ainur777, 1 июл 2014.

  1. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Здравствуйте! У меня проблема с проверкой веденного поля login и password.
    Проблема еще возникла в октябре прошлого года, тогда в мой сайт проникали люди с sql инъекцией. Но хорошо что подсказали как исправить ошибку и проблема не возникала, до этого времени, опять начали взламывать. Сайт обычный, но там выкладываются эксклюзивная информация о финансах и финансировании.
    Помогите кто сможет, вот код:
    Код (Text):
    1. session_start();
    2. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
    3. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    4. if (empty($login) or empty($password))
    5. {
    6. exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Вы ввели не всю информацию, вернитесь назад и заполните все поля!</p></center></h3>");
    7. }
    8. $login = stripslashes($login);
    9. $login = htmlspecialchars($login);
    10. $password = stripslashes($password);
    11. $password = htmlspecialchars($password);
    12. $login = trim($login);
    13. $password = trim($password);
    14. include ("base.php");
    15. $ip=getenv("HTTP_X_FORWARDED_FOR");
    16. if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
    17. mysql_query ("DELETE FROM error WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");
    18. $result = mysql_query("SELECT col FROM error WHERE ip='$ip'",$db);
    19. $myrow = mysql_fetch_array($result);
    20. if ($myrow['col'] > 2) {
    21. exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.</p></center></h3>");
    22. }
    23. $password = md5($password);
    24. $password = strrev($password);
    25. $password = $password."b3g23";
    26.  
    27. $result = mysql_query("SELECT * FROM table WHERE login='$login' AND password='$password'",$db);
    28. $myrow = mysql_fetch_array($result);
    29. if (empty($myrow['id']))
    30. {
    31. $select = mysql_query ("SELECT ip FROM error WHERE ip='$ip'");
    32. $tmp = mysql_fetch_row ($select);
    33. if ($ip == $tmp[0]) {
    34. $result52 = mysql_query("SELECT col FROM error WHERE ip='$ip'",$db);
    35. $myrow52 = mysql_fetch_array($result52);
    36. $col = $myrow52[0] + 1;
    37. mysql_query ("UPDATE error SET col=$col,date=NOW() WHERE ip='$ip'");
    38. }
    39. else {
    40. mysql_query ("INSERT INTO error (ip,date,col) VALUES ('$ip',NOW(),'1')");
    41. }
    42. exit ("<h3><center><p style='color: #fff; background-color:#464646;'>Извините, введённый вами логин или пароль неверный.</p></center></h3>");
    43. }
    44.    
    45. echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
    Может как то в pdo сделать, я сам в pdo пока ноль.
     
  2. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    PDO и подготовленные запросы!!!
    не чего сложного в ПДО нет! все просто до ужаса!

    ну а так я даже не знаю что вам подсказать!
    конкретней в чем трабл?
    используй mysql_real_escape_string
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ainur777, у тебя правда код такой — без отступов? плоский как фотомодель.

    Добавлено спустя 1 минуту 3 секунды:
    видимо ты копировал его с форума и так ничего своего и не добавил. тут нет никакой защиты от инъекции. пока будешь тупо копировать не вникая, будут тебя ломать.
     
  4. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Спасибо!

    Добавлено спустя 39 секунд:
    Да код скопировал с сайта ruseller, но и добавил свой.

    Добавлено спустя 3 минуты 32 секунды:
    А как лучше защитить от sql инъекции?
     
  5. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    в твоем случаи
    используй mysql_real_escape_string
     
  6. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Для вывода strip_tags, для запроса в бд mysql_real_escape_string. Для записи числовых значений используйте функции приведения к типу (int), (float) и проч.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нафига? Зачем вообще порчу данных устраивать? Ну ввел человек теги, так покажи ему то, что он ввел - теги, пропущенные через htmlspecialchars().

    А то вот так копипаст-кодеру ты совет даешь, а он, думаешь, будет в доки лезть и читать? Смотреть, что ему дают? Потом будет писать посты "не могу достать теги из БД, помогите!!!".
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    от попова, значит. вопросов больше не имею.