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

Форум PHP

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

 

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

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

тема: защита полей в PHP, htmlspecialchars и AddSlashes
 
 автор: smorodin   (17.01.2007 в 13:34)   письмо автору
 
 

если при проверки данных от пользователя используется конструкция типа:

$org_name=htmlspecialchars(trim($_POST['org_name']), ENT_QUOTES);

то нужно ли использовать еще и функцию AddSlashes()?

   
 
 автор: Sergey89   (17.01.2007 в 13:43)   письмо автору
 
   для: smorodin   (17.01.2007 в 13:34)
 

Смотря для чего. Если для вставки в БД, то достаточно: $org_name = addslashes(trim($_POST['org_name']));

   
 
 автор: smorodin   (17.01.2007 в 13:49)   письмо автору
 
   для: Sergey89   (17.01.2007 в 13:43)
 

и для впихивания в базу, и для отображения текстом, и для отображения в виде

<input type=text name=org_name value='".$org_name."'>

   
 
 автор: Sergey89   (17.01.2007 в 14:16)   письмо автору
 
   для: smorodin   (17.01.2007 в 13:49)
 

тогда лучше так:
$value = addslashes(trim($_POST['value']));
"<input type=text name=org_name value="'.htmlspecialchars($value).'">"

   
 
 автор: smorodin   (17.01.2007 в 14:22)   письмо автору
 
   для: Sergey89   (17.01.2007 в 14:16)
 

сделал тестовую страницу test.php:


<html>
<?php
if(isset($_POST['text'])) {
  
$text=addslashes(trim($_POST['text']));
  print 
"<form action=test.php method=post>
<input type=text name=text value='"
.htmlspecialchars($text)."'>
<input type=submit>
</form>"
;
  }
else {
print 
"
<form action=test.php method=post>
<input type=text name=text>
<input type=submit>
</form>" 
;
}

?>


</html>

если ввожу в поле символ <'> (одна черточка сверху :) ), то она теряется... :(

   
 
 автор: smorodin   (17.01.2007 в 14:26)   письмо автору
 
   для: smorodin   (17.01.2007 в 14:22)
 

походу, htmlspecialchars($text, ENT_QUOTES) все равно надо использовать, чтобы ' преобразовывалось в &#039

вот только я не знаю, насколько опасно без addslashes в вопросе безопасности... :(

   
 
 автор: Sergey89   (17.01.2007 в 14:28)   письмо автору
 
   для: smorodin   (17.01.2007 в 14:26)
 

addslashes нужен только для вставки в БД.

   
 
 автор: golovdinov   (17.01.2007 в 15:32)   письмо автору
 
   для: Sergey89   (17.01.2007 в 14:28)
 

То есть как я понимаю, если перед вставкой в БД обработать переменную только функцией htmspesialchars() , то это может быть опасно?

   
 
 автор: Sergey89   (17.01.2007 в 15:35)   письмо автору
 
   для: golovdinov   (17.01.2007 в 15:32)
 

Вобще да. addslashes экранирует: \, ', ", NUL байт

   
 
 автор: Thrasher   (17.01.2007 в 15:55)   письмо автору
 
   для: golovdinov   (17.01.2007 в 15:32)
 

>То есть как я понимаю, если перед вставкой в БД обработать переменную только функцией htmspesialchars() , то это может быть опасно?
Обрабатывать htmlspecialchars( ) перед вставкой в базу данных не нужно, этой функцией обрабатываешь при выводе из БД.

   
 
 автор: mindless   (17.01.2007 в 16:34)   письмо автору
 
   для: Thrasher   (17.01.2007 в 15:55)
 

htmlspecialchars(addslashes($string));

2 Thrasher

htmlspecialchars -- Преобразует специальные символы в HTML сущности
В HTML некоторые символы имеют специальное значение и для сохранения своего значения должны быть преобразованы в HTML сущности. Эта функция возвращает строку, над которой проведены некоторые из таких преобразований

Производятся следующие преобразования:


'&' (амперсанд) преобразуется в '&amp;'

'"' (двойная кавычка) преобразуется в '&quot;' when ENT_NOQUOTES is not set.

''' (одиночная кавычка) преобразуется в '&#039;' только в режиме ENT_QUOTES.

'<' (знак "меньше чем") преобразуется в '&lt;'

'>' (знак "больше чем") преобразуется в '&gt;'

   
 
 автор: Thrasher   (17.01.2007 в 18:00)   письмо автору
 
   для: mindless   (17.01.2007 в 16:34)
 

Ну так и я про то же.
Но делать эти преобразования нужно при выводе из базы, а не при вводе в нее.
В базе строка хранится в первоначальном виде.

   
 
 автор: Sergey89   (17.01.2007 в 18:08)   письмо автору
 
   для: Thrasher   (17.01.2007 в 18:00)
 

Thrasher, +1

   
 
 автор: smorodin   (18.01.2007 в 09:20)   письмо автору
 
   для: Thrasher   (17.01.2007 в 18:00)
 

а какая разница, когда нужно делать преобразования? :)

   
 
 автор: Sergey89   (18.01.2007 в 10:26)   письмо автору
 
   для: smorodin   (18.01.2007 в 09:20)
 

Разница есть. В базе надо хранить оригинал для того, чтобы его можно было легко редактировать.

   
 
 автор: smorodin   (18.01.2007 в 11:34)   письмо автору
 
   для: Sergey89   (18.01.2007 в 10:26)
 

ок, спасибо всем!

   
Rambler's Top100
вверх

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