Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: stripslashes
 
 автор: ladan   (14.12.2011 в 11:42)   письмо автору
 
 

Добрый день, обязательно ли стоит переменные из формы(куда вводят текст) обрабатывать stripslashes? $a = stripslashes($a). Я так понимаю делают это для того, чтобы базе не навредили? Если можно, пример, со слешами \, как можно навредить базе :)

  Ответить  
 
 автор: SerG7   (14.12.2011 в 12:12)   письмо автору
 
   для: ladan   (14.12.2011 в 11:42)
 

Прочитайте про магические кавычки..тогда поймете...

  Ответить  
 
 автор: cheops   (14.12.2011 в 14:38)   письмо автору
 
   для: ladan   (14.12.2011 в 11:42)
 

Не совсем так. При экранировании имеется два подхода, вы можете просто экранировать спец символы при поступлении их из формы (или не экранировать, если режим "магических кавычек" включен), а можете просто убирать доп-экранирование (если оно добавлено режимом "магические кавычки"), а самим экранированием заниматься поближе к SQL-запросу. Для убирания доп-экранирования как раз и используется stripslashes(). Первый подход удобен, когда у вас много данных (почти все) поступает из вне, второй - когда у вас много данных поступает из других таблиц или файлов (вам часть данных придется все-равно экранировать поблизости от SQL-запроса и следить за тем, кто поступил из вне, а кто изнутри становится накладным и небезопасным).

>Если можно, пример, со слешами \, как можно навредить базе :)
Навредить можно при помощи SQL-инъекций, у нас имеется книга "Головоломки на PHP для хакера", в которой описывается, как можно навредить и самим предлагается попробовать (разумеется для всех заданий есть ответы). Фактически при помощи единственной SQL-инъекции можно получить информацию из всех таблиц и полей базы данных. В том числе и пароли, в том числе и в других таблицах, например, обслуживающих систему администрирования.

  Ответить  
 
 автор: ladan   (14.12.2011 в 20:42)   письмо автору
 
   для: cheops   (14.12.2011 в 14:38)
 

спасибо за инфу, нашел вот такое:

Все запросы, использующие внешние данные, требуется защитить от SQL-инъекций. Внешние данные могут быть переданы не только в качестве GET-параметров, но и методом POST, взяты из COOKIE, со сторонних сайтов или из базы данных, в которую пользователь имел возможность занести информацию.
Все числовые параметры следует явно преобразовывать в числовой вид с помощью функций intval() и floatval()
Все строковые параметры следует экранировать с помощью mysql_real_escape_string() и заключать в кавычки.
Если построить SQL-инъекцию сложно, не следует ожидать, что злоумышленник не догадается как это сделать. Особенно это относится к движкам, исходный код которых является публичным.


думаю хватит :)


а как можно удалять обратные слеши (\)? Вообщем ситуация такая, если человек в текстовом поле формы введет допустим Саша\, то запись в бд не происходит, а если ввести Саша\саша, то все ок. Или просто ввести обратный слеш, то тоже запись в БД не пройзойдет. Может есть какое-то условие, типа если в переменной $a существует хоть один обратный слеш, то скрипт останавливать и выводить сообщение, что обратные слеши запрещены..
mysql_error выводит следущее


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\')' at line 1

  Ответить  
 
 автор: cheops   (14.12.2011 в 22:50)   письмо автору
 
   для: ladan   (14.12.2011 в 20:42)
 

Штука в том, что если пользователь вводит "Саша\", то и должно так быть в базе, т.е. нужно добиться того, чтобы в строке было "Саша\\", аналогично и "Саша\саша" должно преобразоваться в "Саша\\саша", а не в "Сашасаша" или хуже того в "Сашааша", где между a и a, стоит невидимый символ. Поэтому и нужно экранирование, а stripslashes() нужен, чтобы избежать повторого экранирования, чтобы начальное "Саша\саша" не превращалось в "Саша\\\саша", "Саша\\\\саша" и "Саша\\\\\саша". Делать можно что угодно, но в базе должно лежать ровно то, что ввел пользователь. В противном случае, мы бы сейчас с вами не могли бы разговаривать - код бы резал бы наши слеши, как ему вздумается и отображал бы лишь то, что считает безопасным. А от него требуется отображать то, что ввел пользователь.

  Ответить  
 
 автор: ladan   (14.12.2011 в 23:33)   письмо автору
 
   для: cheops   (14.12.2011 в 22:50)
 

ясно спасибо :)

  Ответить  
 
 автор: ladan   (15.12.2011 в 11:05)   письмо автору
 
   для: cheops   (14.12.2011 в 22:50)
 

а как можно с мощью preg_match запретить вводить обратные слеши(\)? или может другой способ есть?

  Ответить  
 
 автор: cheops   (15.12.2011 в 13:26)   письмо автору
 
   для: ladan   (15.12.2011 в 11:05)
 

В регулярных выражениях, с ними тоже не просто, особенно в таких языках, как PHP, где регулярные выражения в строках со своими экранирующими слешами. Вообще следует искать символ "\\".

  Ответить  
 
 автор: ladan   (15.12.2011 в 17:17)   письмо автору
 
   для: cheops   (15.12.2011 в 13:26)
 

спасибо, правда с 2 \\ не получилось, а вот 3 подрят прописал в рег. выражении и теперь все окей, обратные слеши находятся :) спасибо еще раз!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования