1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Регулярные выражения и Sql инъекции

Тема в разделе "Web - программирование", создана пользователем Satell, 17 сен 2007.

  1. Satell

    Satell Гость

    Репутация:
    0
    1)
    $arr = array("Gaz","Gazeta","gazirovanniy","glazirovanniy","Gazenvagen","asdfgazasdfh");
    $reg="/.?gaz.?/i";

    for($i=0; $i<count($arr); $i++)
    {
    if (preg_match($reg, $arr[$i])) {
    echo $arr[$i];
    }
    }

    почему такое регулярное выражение $reg="/.?gaz.?/i"; выводит слова Gaz, Gazeta, Gazenvagen, asdfgazasdfh,
    хотя должно выводить только Gaz?! ведь .? это 0 или 1 символ

    2) как вставить точки перед знаками вопроса в такой строчке $reg="/?gaz?/i";
    3)
    какой sql инъекцией можно "пробить" такой код?
    $login = $_REQUEST['login'];
    $password = $_REQUEST['password'];
    $res = mysql_query('SELECT id FROM users
    WHERE login="'.$login.'" AND password="'.$password.'"');
    list($user_id) = mysql_fetch_array($res);
    session_start();
    $_SESSION['authorized'] = isset($user_id);
     
  2. ????

    ???? Гость

    Репутация:
    0
    <P>3) как вариант в логин загнать [sql]; drop table users; select * from users where 1=1[/sql] при определенных обстоятельсвах может дропнуть таблицу пользователей.</P>
     
  3. MajestiC

    MajestiC Гость

    Репутация:
    0
    Для: Satell
    1. Потому что у тебя не поставлены определители начала и конца строки в регулярке.
    2. Какие еще точки?
    3. Ввести в поле пароля след строчку
    " OR 1=1 OR "s"="
     
  4. aka_Kail

    aka_Kail Гость

    Репутация:
    0
    Вот рабочий код

    $arr = array("Gaz","Gazeta","gazirovanniy","glazirovanniy","Gazenvagen","asdfgazasdfh");

    $reg="/(^gaz$)/i";

    for($i=0; $i<count($arr); $i++)
    {
    if (preg_match($reg, $arr[$i])) {
    echo $arr[$i];
    }
    }

    # Вывел только Gaz
     
Загрузка...

Поделиться этой страницей