Я в програмирование новичек и не совсем понимаю в этих sql инъекциях, есть там в них OR 1-1, что то подобное, так вот OR 1-1 попадает в поиск и запись в базу, но самое главное что во всех моих исходниках стоят маааленькие ковычки ', ведь злоумышленику для осуществления какого та запроса нужно тоже вводить ковычку, но во всем моем кодинге preg_replace убирает их, что хочу спросить таким методом как я делаю злоумышленник бессилен? могу конечно фильтровать полученые данные от пользователя с помощью mysql_real_escape_string но зачем если preg_replace все убрал? sql инъекция возможна?
if($_POST['send']){
$name =$_POST['name'];
$name2 = preg_replace('%[^ 0-9a-zA-ZА-Яа-я_-]+%', '', $name);
$user2 = mysql_query("SELECT * FROM user WHERE `name`='$name2'");
$users2 = mysql_fetch_array($user2);
$nameus = $users2['name'];
if(empty($nameus)){
INSERT - регистрируем под именем $name2
} else {
echo 'Такой пользователь уже зарегистрирован';
}
}
p.s. От XSS атак я защитил исходник, хочу узнать какие еще методы взлома возможны? чтоб я сейчас во всем коде все отфильтровал и был уверен на 100% в защите
Дополню, мой сайт работает исключительно на сессиях, куки же можно подменить и все человечек зашел под каким хочешь пользователям, а у меня же запросы в базу вот такие
$user = mysql_query("SELECT `sity` FROM user WHERE `id`='{$_SESSION['id']}'");
$user2 = mysql_fetch_array($user);
$sity = $user2['sity'];
echo ''.$sity.'';
У меня везде такой код.
Подскажите пожалуйста новичку какие еще бывают методы взлома, и расскажите правильно ли я фильтрую вводимую информацию preg_replace
Дополню на счет preg_replace - да возможно он и дольше выполняется на сервере, это не имеет значения! Главное ЗАЩИТА, а то что больше ресурсов расходует это пустяк!
Спустя 4 минуты, 12 секунд (17.02.2012 - 11:05) Invis1ble написал(а):
Василий20000
http://phpforum.ru/index.php?showtopic=21213
http://phpforum.ru/index.php?showtopic=21213
Спустя 6 минут, 16 секунд (17.02.2012 - 11:12) Василий20000 написал(а):
Цитата (Invis1ble @ 17.02.2012 - 08:05) |
Василий20000 http://phpforum.ru/index.php?showtopic=21213 |
Спасибо, читаю
Спустя 49 минут, 1 секунда (17.02.2012 - 12:01) killer8080 написал(а):
Цитата (Василий20000 @ 17.02.2012 - 10:01) |
могу конечно фильтровать полученые данные от пользователя с помощью mysql_real_escape_string но зачем если preg_replace все убрал? sql инъекция возможна? |
избыточные ограничения, просто всегда обрабатывай текстовые данные, перед вставкой в sql запрос, с помощью mysql_real_escape_string, числа приводи к типу (int) или (float), в зависимости от типа, и все.
В том запросе, я так понял вводится имя? А если нужно ввести имя Д'артаньян?

Спустя 5 минут, 28 секунд (17.02.2012 - 12:06) GET написал(а):
Цитата |
$name2 = preg_replace('%[^ 0-9a-zA-ZА-Яа-я_-]+%', '', $name); |
здесь ничего сделать не смогут пробел можно заменить на \s для читабельности
Спустя 3 минуты, 1 секунда (17.02.2012 - 12:09) killer8080 написал(а):
Цитата (A.B.C. @ 17.02.2012 - 11:06) |
пробел можно заменить на \s для читабельности |
\s это не пробел, а любой пробельный символ

Спустя 16 секунд (17.02.2012 - 12:09) Invis1ble написал(а):
\s и пробел - разные вещи, rtm
ЗЫ.
ЗЫ.

Спустя 3 минуты, 18 секунд (17.02.2012 - 12:13) GET написал(а):
Invis1ble
Да точно...\s любой пробельный символ...включай перенос строки например
Да точно...\s любой пробельный символ...включай перенос строки например
Спустя 14 часов, 9 минут, 58 секунд (18.02.2012 - 02:23) Василий20000 написал(а):
Цитата (A.B.C. @ 17.02.2012 - 09:06) | ||
здесь ничего сделать не смогут пробел можно заменить на \s для читабельности |
Спасибо, вот как раз вот такой ответ я и ждал, а то каждый свое мне пытается донести, экранировать нужно символы, инт вставлять(за меня это все сделает preg_replace), , я задал другой вопрос возможна sql инъекция в коде или нет, вы на него ответили, спасибо большое!)
Спустя 17 минут, 55 секунд (18.02.2012 - 02:41) Василий20000 написал(а):
Цитата (killer8080 @ 17.02.2012 - 09:01) | ||
избыточные ограничения, просто всегда обрабатывай текстовые данные, перед вставкой в sql запрос, с помощью mysql_real_escape_string, числа приводи к типу (int) или (float), в зависимости от типа, и все. В том запросе, я так понял вводится имя? А если нужно ввести имя Д'артаньян? ;) |
числа я привожу вот так
$id2 = preg_replace('%[^0-9]+%', '', $id);
это самый нормальный способ) без int справимся
А Д'артаньянов у нас на сервере не каких не будет, они будут Дартаньянами, если я уберу эти ограничения с preg_replace, и буду экранировать данные mysql_real_escape_string, то мне прийдется в 100 скриптов прописывать этот mysql_real_escape_string, потому что в каждом из них идет запрос подобный этому
$user = mysql_query("SELECT `sity` FROM user WHERE `name`='{$_SESSION['name']}'");
$user2 = mysql_fetch_array($user);
$sity = $user2['sity'];
echo ''.$sity.'';
Каждый раз нужно будет $_SESSION['name'] экранировать, а если я что то забуду? где то пропущу экранирование, все дырка открыта (ломай сервер, хакер welcome), пускай лучше кто то будет обделен этой ковычкой чем я открою гдето дырку
Изначально
$name2 = preg_replace('%[^ 0-9a-zA-ZА-Яа-я_-]+%', '', $name);
отфильтровал данные, и все не нужно мне что то экранировать в дальнейшем (Так как команды хакер не какой не сможет составить в базу с допустимыми символами), я хотел только УЗНАТЬ возможно подобрать какой то вредный запрос с этими символами ( 0-9a-zA-ZА-Яа-я_-)
Спустя 11 минут, 37 секунд (18.02.2012 - 02:52) Invis1ble написал(а):
Василий20000
Цитата |
числа я привожу вот так $id2 = preg_replace('%[^0-9]+%', '', $id); это самый нормальный способ) без int справимся |
аха, зачот

Тебе дали адекватные советы, не хочешь прислушиваться - жди проблем.
Спустя 55 минут, 39 секунд (18.02.2012 - 03:48) GET написал(а):
Цитата |
числа я привожу вот так $id2 = preg_replace('%[^0-9]+%', '', $id); это самый нормальный способ) без int справимся |
Василий20000
Поверь, в запросе правильнее, логичнее и быстрее воспользоваться (int)
$id2 = (int) $id;
Спустя 28 минут, 40 секунд (18.02.2012 - 04:16) Василий20000 написал(а):
Цитата (Invis1ble @ 17.02.2012 - 23:52) | ||
Василий20000
аха, зачот ![]() Тебе дали адекватные советы, не хочешь прислушиваться - жди проблем. |
а можно привести пример возможной проблемы?
Спустя 1 минута, 36 секунд (18.02.2012 - 04:18) Invis1ble написал(а):
Василий20000
Вообще, аналогия такая:
Твой вопрос:
"Есть полка, я ее хочу закрепить, и шурупы. Я могу воспользоваться отверткой, но зачем, если есть молоток?"
Ответы:
"Воспользуйся отверткой."
Твой ответ:
"Молоток - самый нормальный способ. Без отвертки справимся."
Вообще, аналогия такая:
Твой вопрос:
"Есть полка, я ее хочу закрепить, и шурупы. Я могу воспользоваться отверткой, но зачем, если есть молоток?"
Ответы:
"Воспользуйся отверткой."
Твой ответ:
"Молоток - самый нормальный способ. Без отвертки справимся."
Цитата |
а можно привести пример возможной проблемы? |
проблема в производительности как минимум. Использование регулярных выражений - ресурсоемкая операция.
Спустя 4 минуты, 38 секунд (18.02.2012 - 04:23) Invis1ble написал(а):
В целом - делай как хочешь.
Ты спросил - тебе ответили, остальное твоя забота.
Лично у меня уже давно пропало желание убеждать кого-либо в чем-либо.
Ты спросил - тебе ответили, остальное твоя забота.
Лично у меня уже давно пропало желание убеждать кого-либо в чем-либо.
Спустя 12 часов, 8 минут, 19 секунд (18.02.2012 - 16:31) nugle написал(а):
A.B.C.
проблема в том, что если юзер ввел случайно 2f, твое инт вернет ему число 2, а прег матч вернет ошибку сразу(в саму проблему не вдумывался)
проблема в том, что если юзер ввел случайно 2f, твое инт вернет ему число 2, а прег матч вернет ошибку сразу(в саму проблему не вдумывался)
Спустя 8 часов, 54 минуты, 41 секунда (19.02.2012 - 01:26) Invis1ble написал(а):
Там preg_replace()
А вот если введет hello, то preg_replace() вырежет все и будет ошибка.
А вот если введет hello, то preg_replace() вырежет все и будет ошибка.
Спустя 3 часа, 34 минуты, 36 секунд (19.02.2012 - 05:00) GET написал(а):
Invis1ble
nugle
Вам не кажется, что человек, который в числовое поле или адресную строку будет вводить заведомо неверную инфу надеется на какой то разультат?
Если это не критично, т.е. не повлияет на работу скрипта, зачем нагружать скрипт лишней проверкой...
Ну ввел id=hello ...(int)id=0...такой строки нет...ввел id=2f...(int)id=2...есть такая строка. Равносильно, что id=0 и id=2 изначально. Мне кажется проверять надо только там, где юзер случайно может ввести не ту инфу и соответственно получит не верный результат в браузере.
nugle
Вам не кажется, что человек, который в числовое поле или адресную строку будет вводить заведомо неверную инфу надеется на какой то разультат?
Если это не критично, т.е. не повлияет на работу скрипта, зачем нагружать скрипт лишней проверкой...
Ну ввел id=hello ...(int)id=0...такой строки нет...ввел id=2f...(int)id=2...есть такая строка. Равносильно, что id=0 и id=2 изначально. Мне кажется проверять надо только там, где юзер случайно может ввести не ту инфу и соответственно получит не верный результат в браузере.
Спустя 2 минуты, 24 секунды (19.02.2012 - 05:03) Invis1ble написал(а):
A.B.C.
А я-то тут причем? Перечитай топик и подумай еще раз о смысле моих комментов, если не понял.
А я-то тут причем? Перечитай топик и подумай еще раз о смысле моих комментов, если не понял.
Спустя 10 часов, 10 минут, 35 секунд (19.02.2012 - 15:13) inpost написал(а):
В твоём первом коде нет уязвимости. Это как снайперу, для убийства одного мужика, кидать целую атомную бомбу. Эффективно так же, как и обычный выстрел 
Единственное модификатор u добавить для кодировки ЮТФ.

Единственное модификатор u добавить для кодировки ЮТФ.