|
|
|
| Такая ситуация:
обработчику отправляются данные из формы, в начале скрипта обрабатываю данные через функцию htmlspecialchars вот так $_POST['name'] = htmlspecialchars($_POST['name'])
Но вот только, если в name содержатся кириллические символы, то htmlspecialchars возвращает пустую строку. Как быть?
Что-то с кодировкой там, видимо. | |
|
|
|
|
|
|
|
для: Mookapek
(03.02.2015 в 23:48)
| | Да, в кодировке дело.
Начиная с версии PHP 5.4 значение по умолчанию для параметра encoding функции htmlspecialchars было изменено на UTF-8. А у меня страницы были в Windows-1252. | |
|
|
|
|
|
|
|
для: Mookapek
(03.02.2015 в 23:48)
| | > в начале скрипта обрабатываю данные через функцию htmlspecialchars
А зачем, если не секрет? | |
|
|
|
|
|
|
|
для: Sfinks
(04.02.2015 в 01:40)
| | Против межсайтового скриптинга. | |
|
|
|
|
|
|
|
для: Mookapek
(04.02.2015 в 02:58)
| | это надо делать непосредственно перед выводом в браузер
нечего htmlspecialchars делать в начале скрипта
об этом пишут на каждом форуме много лет подряд, да кто бы еще читал.... | |
|
|
|
|
|
|
|
для: Valick
(04.02.2015 в 07:12)
| | Ну вот у меня перед выводом в браузер и делается. | |
|
|
|
|
|
|
|
для: Mookapek
(04.02.2015 в 17:55)
| | А тогда это зачем - $_POST['name'] = htmlspecialchars($_POST['name']) ? | |
|
|
|
|
|
|
|
для: confirm
(04.02.2015 в 18:17)
| | В обработчике есть строка
echo $_POST['name'] | |
|
|
|
|
|
|
|
для: Mookapek
(04.02.2015 в 22:40)
| | Лучше обрабатывать именно при выводе:
<?php
echo htmlspecialchars($_POST['name']);
|
Либо, если одно и то же значение выводится несколько раз, то чтобы не обрабатывать многократно, присвоить результат обычной переменной:
<?php
$name = htmlspecialchars($_POST['name']);
echo $name;
|
Но никак не:
> в начале скрипта обрабатываю данные через функцию htmlspecialchars
Потому что в таком случае, данные и в БД попадут обработанными. А в БД оно не нужно. Перед вставкой в БД нужно обрабатывать совсем другими функциями.
И даже если в данном конкретном примере у вас нет вставки в БД, все равно не нужно обрабатывать в начале скрипта. Потому что привыкнув обрабатывать так, а не правильно, в конце концов у вас где-то да закрадется ошибка, пусть даже в другом скрипте. | |
|
|
|
|
|
|
|
для: Sfinks
(05.02.2015 в 00:34)
| | > Потому что в таком случае, данные и в БД попадут обработанными
Так я и хочу, чтобы и в БД они попали обработанные, без всяких зловредных скриптов. Ведь я потом эти же данные из БД вывожу в браузер. Так вот, чтобы всякий раз перед выводом переменной не протаскивать ее через htmlspecialchars, я фильтрую её один раз непосредственно после получения из формы. | |
|
|
|
|
|
|
|
для: Mookapek
(05.02.2015 в 00:40)
| | Хотеть можно все что угодно. А правильно в данной ситуации так, как вам тут все говорят. В бд надо не скриптов бояться, а sql-инъекций. Ладно, не хотите слышать, не надо. Со временем сами придете к тому, о чем вам говорят....
А если не придете сами, то когда-нить устроитесь программистом, и тогда вам тим-лид или ведущий программист, увидев такое, просто скажет: "Чтоб такого больше не было!" =)
И это я перевел его гнусную брань на цензурный язык :D
P.S. А что вы будете делать с этими данными из БД, если они вам не в браузере понадобятся? Ну в эксель-таблице, например.... Обратно обрабатывать?
Можно не отвечать. Информация к размышлению. | |
|
|
|
|
|
|
|
для: Sfinks
(05.02.2015 в 02:18)
| | > В бд надо не скриптов бояться, а sql-инъекций.
sql-инъекций я не боюсь, я с ними борюсь с помощью функции mysql_escape_string | |
|
|
|
|
|
|
|
для: Mookapek
(05.02.2015 в 00:40)
| | >я фильтрую её один раз непосредственно после получения из формы.
Вы не фильтруете, вы насилуете. Ведь у вас даже проверки данных еще нет, а вы уже в панике занимаетесь тем, чем вообще не стоит. | |
|
|
|
|
|
|
|
для: confirm
(05.02.2015 в 05:15)
| | Ну а если без эпитетов вроде "паники", "насилуете" и т.д., а конкретно что криминального в этой строке
$_POST['name'] = htmlspecialchars($_POST['name']) ?
Пока я услышал такие доводы:
"нечего htmlspecialchars делать в начале скрипта"
"Потому что в таком случае, данные и в БД попадут обработанными. А в БД оно не нужно."
"вы уже в панике занимаетесь тем, чем вообще не стоит"
"Хотеть можно все что угодно. А правильно в данной ситуации так, как вам тут все говорят."
Из этого всего я так и не понял, почему я делаю неправильно. | |
|
|
|
|
|
|
|
|
для: Sfinks
(05.02.2015 в 00:34)
| | Я так и не понял, чем это
$name = htmlspecialchars($_POST['name']);
лучше этого
$_POST['name'] = htmlspecialchars($_POST['name']); | |
|
|
|
|
|
|
|
для: Mookapek
(05.02.2015 в 19:02)
| | 1. Тем что оригинал не изменяется. Но в вашем случае это не аргумент. Я понял.
2. Суперглобальные массивы лучше вообще не изменять. Я недавно столкнулся с одной CMS, которая просто валилась с фаталом, Когда полез в логи и код выяснять в чем дело, увидел такое объявление функции:
<?php
function funcname($_REQUEST, $params){
..... тело функции ......
}
| Я конечно офигел и не понял вообще зачем так делать в принципе. Но у клиента на пхп 5.2 оно работало. И оказалось, что начиная с пхп 5.4 взять вот так и полностью переопределить суперглобальный массив уже нельзя! И я не исключаю, что их со временем вообще запретят редактировать. | |
|
|
|
|
|
|
|
для: Mookapek
(04.02.2015 в 22:40)
| | Это не повод для паники. | |
|
|
|