Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [mysql] anti-sql inject 
:(
    Опции темы
adamant
Дата 2.1.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.3.2006
Где: Москва

Репутация: нет
Всего: нет



Привет! Вот такой вопрос по теории с применением в практике =)

предположим есть такое:
Код

$login = $_GET['login'];
$sql = mysql_query("select `password` from `users` where login = `$login`");


ну это конешно [censored 6]. никакой безопасности, да вот только у меня на данный момент три варианта как защищать что-либо от инъекций...

вариант первый:
Код

$sql = mysql_query("select `password` from `users` where login = `". mysql_escape_string( $login ) ."`");

Вариант второй:
взять анти инжект от IPB
Третий:
Код

<?php
$sql_inject_1 = array(";", "'", "%", '"');
$sql_inject_2 = array("", "", "", ""); 
$GET_KEY = array_keys($_GET); 
$POST_KEY = array_keys($_POST); 
$COOKIE_KEY = array_keys($_COOKIE)

/*begin clear $_GET */

        for($i=0; $i < count($GET_KEY); $i++) 
    {
        $_GET[$GET_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_GET[$GET_KEY[$i]]));
    }
    
/*end clear $_GET */

/*begin clear $_POST */
        for($i=0;$i<count($POST_KEY);$i++) 
    {
        $_POST[$POST_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_POST[$POST_KEY[$i]]));
    }
    
/*end clear $_POST */

/*begin clear $_COOKIE */

        for($i=0;$i<count($COOKIE_KEY);$i++) 
    {
        $_COOKIE[$COOKIE_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_COOKIE[$COOKIE_KEY[$i]]));
    }
/*end clear $_COOKIE */
?>




НО! третий вариант у меня не работает я задолбался искать причину помогите мне пожалуйста и если не затруднит объясните почему нельзя так делать...  smile 

Заранее благодарю.
PM MAIL ICQ   Вверх
vasac
Дата 2.1.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 3
Всего: 36



Не могли бы пояснить, что делается в этом варианте, что не работает и чем не устраивает вариант N1.

Цитата(adamant @  2.1.2007,  21:50 Найти цитируемый пост)
Вариант второй:
взять анти инжект от IPB

Вот здесь бы можно было бы и описать его суть.
PM WWW   Вверх
Opik
Дата 2.1.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



adamant, 
Третий вариант никуда не годиться, чем не устраивает первый?
Поясню насчет третий варианта: Есть некая форма, пользователь вводит свой логин допустим, Д'Артаньян, какого его будет удивление, когда он увидит нечто иное (ДАртаньян).
Интиинжект, возможно, но я пользуюсь первым вариантом и я доволен.
PM MAIL Skype   Вверх
Mal Hack
Дата 2.1.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Первый вариант хорош, только mysql_real_escape_string....
А вообще, лучше PDO использовать...
PM ICQ   Вверх
adamant
Дата 3.1.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.3.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата

Поясню насчет третий варианта: Есть некая форма, пользователь вводит свой логин допустим, Д'Артаньян, какого его будет удивление, когда он увидит нечто иное (ДАртаньян).

при регистрации не даст такого сделать... я про ". ' ."

Номер один лучший, но не понимаю разницы между mysql_real_escape_string /// mysql_escape_string

По поводу PDO у меня 4 php.

Цитата

Вот здесь бы можно было бы и описать его суть.

а суть проста похожа на 3ий вариант... У меня есть ещё замечательный анти инжект но он делает die(); 

Цитата

Не могли бы пояснить, что делается в этом варианте


цикл который прокручивает все данные (post, get, cookie)
ищет запрещённые символы и превращает их в пустоту.

Это сообщение отредактировал(а) adamant - 3.1.2007, 00:12
PM MAIL ICQ   Вверх
Mal Hack
Дата 3.1.2007, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(adamant @  3.1.2007,  00:10 Найти цитируемый пост)
но не понимаю разницы между mysql_real_escape_string /// mysql_escape_string

Ман открой, поймешь разницу.

Цитата(adamant @  3.1.2007,  00:10 Найти цитируемый пост)
По поводу PDO у меня 4 php.

Выкинь 4 на помойку.


PM ICQ   Вверх
kat_ru
Дата 17.1.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



=) оффтоп, но, а есть замена mysql_real_escape_string в MSsql.?
PM MAIL   Вверх
skyboy
Дата 18.1.2007, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



kat_ru, а какая набок разница, в какую СУБД будешь пихать "обработанную" строку? 
какие символы являются специальными в МССКЛ? если одинарная/двойная кавычка, перенос строки и символ с нулевым кодом - то зачем тебе ещё какие - то функции?
mysql_real_escape_string слеширует указанные символы. Если вдруг слеширование работает и в MSSQL, b специсимволов кроме указанных нет(апостроф - спецсимвол или нет?), то юзай ьныйд_куфд_уысфзу_string
PM MAIL   Вверх
kat_ru
Дата 18.1.2007, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



я немного не в адеквате сейчас, но могу привести пример селекта на мсскул

Код

$login = stripslashes( $_POST['login'] );
$password = stripslashes( $_POST['password'] );

$query = mssql_query("select * from members where login = ' ".$login." ' and password =  ' ".$password." ' ");
$result = mssql_fetch_object( $query );
$rows = mssql_num_rows( $query );

    if($rows === '0') print'error please try again.';
         else
    {
         print "login:".$result->login."<br ./>";
         print "hash:" . $result->hash;
    }


вот так вот, зачем писал.... ех.... smile если ошибся где ну уж извиняйте =)...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.