PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (594): В начало « ... 13 14 15 16 [17] 18 19 20 21 ... » В конец

> Найдено сообщений: 8901
EuGen Отправлено: 29 Октября, 2013 - 15:56:26 • Тема: Вопрос по безопасности php • Форум: Программирование на PHP

Ответов: 99
Просмотров: 4971
armancho7777777
Спойлер (Отобразить)

Насчёт экранирования и использования кавычек - в ORM так нередко поступают. Не скажу, что при этом будет наблюдаться разница. Нет - оверхед на приведение типов, как правило, пренебрежимо мал. С другой стороны, лично я бы использовал проверку и приведение типов до вставки значения в подготовленный запрос (prepared statement) - так как это, во-первых, отвечает самой логике (читающий код поймёт, что ожидается, например, целое число, а не строка), а во-вторых, так можно быть уверенным, что проверка не пропустила, например, "", которое будет приведено к 0 - и, значит, бизнес-логика не будет нарушена. Но не всегда возможно использовать явную валидацию и приведение - нередко запрос сложен, генерируется динамически - и тогда использование кавычек и экранирования можно использовать, как универсальный вариант (опять же, так и поступают во многих ORM)

Stokmam
Нет смысла так смешивать различные функции. Вообще, htmlspecialchars() обычно стоит использовать при отображении данных. Сами пользовательские данные вряд ли стоит модифицировать иным оразом, кроме как экранирование при записи в БД (при этом само экранирование не портит данные, оно просто позволяет им верно храниться в БД). Кратко: каждая проверка хороша там, где действительно нужна, каждая валидация должна проверять/отсекать только то, что предусмотрено логикой.
EuGen Отправлено: 29 Октября, 2013 - 15:44:01 • Тема: Вопрос по безопасности php • Форум: Программирование на PHP

Ответов: 99
Просмотров: 4971
armancho7777777
Насчёт кавычек - я не очень понял, в чём состоит "противостояние", однако на практике, как правило, нет разницы - ставить их или нет. Если говорить о правильных числах, заключённых в кавычки - то разница будет состоять лишь в неявном приведении типов. Таким образом, при заключении числовых параметров в кавычки ничего плохого не произойдёт, но запрос всё-таки будет работать медленнее, поскольку приведение типов всё-таки потребляет ресурсы системы.

В старых версиях MySQL (наподобие 4) возможна так же ситуация, когда заключение числовых значений в кавычки приведёт к тому, что СУБД не будет использовать индекс, однако точных случаев я описать не могу, да и, кроме того, в MySQL 5.0+ такое не произойдёт никогда (то есть индекс всегда будет использоваться, если это возможно - независимо от того, заключено ли значение в кавычки или нет).

То есть, как резюме - не заключать числовые значения в кавычки можно считать "хорошим тоном", но нет ничего страшного в том, чтобы эти самые кавычки использовать. Если вопрос не стоит об "оптимизации миллиметров", то в скорости разницы тоже нет. Многие ORM используют заключение полей в кавычки как универсальный способ передачи параметров - и при этом всё работает верно.

[upd.]
armancho7777777, призываю Вас к более сдержанному стилю ведения беседы на конференции. Это не первый случай, когда Вы прибегаете к обвинению собеседника в некомпетентности - прошу подумать, стоит ли так делать.
EuGen Отправлено: 29 Октября, 2013 - 15:33:18 • Тема: Вопрос по безопасности php • Форум: Программирование на PHP

Ответов: 99
Просмотров: 4971
Ch_chov пишет:
Именно в данном случае
http://stackoverflow[dot]com/a/12118602/272927

Неверно. Приведённое исследование верно только в случае, если:
- Версия MySQL - ниже 5.1
- И не используется mysql_set_charset() / $mysqli->set_charset()
- И не используется DSN для PDO
- И используется кодировка GBK/BIG-5

Таким образом - да, существует возможность выйти за границы mysql_real_escape_string() - но, если обратить внимание на список "требований" для этого выше - это представляется очень маловероятным (если хотя бы один пункт не выполнен, атака не удастся).

По теме - вероятно, данную дискуссию об SQL-уязвимости стоит выделить в отдельное обсуждение.
EuGen Отправлено: 29 Октября, 2013 - 14:59:23 • Тема: Вопрос к программистам • Форум: Прочее

Ответов: 37
Просмотров: 482
Предположим, что есть массив строк, который нужно перемешать в случайном порядке. Требуется реализовать такое перемешивание, чтобы оно удовлетворяло требованиям псевдослучайности, то есть реализацией должна быть некоторая функция, например, "getShuffle", которая будет принимать два параметра - массив и некоторое значение (целое число). Внутри одного значения этого числа порядок внутри массива должен быть одинаковым при последовательном перемешивании, неважно сколько раз применялась функция.
Пример:
PHP:
скопировать код в буфер обмена
  1. $data = ['a', 'b', 'c'];
  2. $data = getShuffle($data, 20); //20 - просто некоторая константа
  3. var_dump($data);//пусть будет ['b', 'c', 'a']
  4. $data = getShuffle($data, 20);
  5. var_dump($data);//пусть будет ['a', 'c', 'b']
  6. $data = getShuffle($data, 20);
  7. var_dump($data);//пусть будет ['c', 'a', 'b']
  8. // и т.п.

- и не важно, сколько раз был запущен скрипт, порядок на каждом шаге должен оставаться одинаковым, хотя и неизвестным заранее.
вариант (Отобразить)
EuGen Отправлено: 29 Октября, 2013 - 08:39:50 • Тема: Работа с классами • Форум: Вопросы новичков

Ответов: 4
Просмотров: 197
ВэйДлин
PHP:
скопировать код в буфер обмена
  1. class arr extends ArrayObject { }

?
EuGen Отправлено: 28 Октября, 2013 - 15:59:58 • Тема: Запретить доступ напрямую к php-скрипту кроме JS скрипта(AJAX) • Форум: Работа с файловой системой и файлами

Ответов: 9
Просмотров: 7349
Никак.
EuGen Отправлено: 25 Октября, 2013 - 17:38:25 • Тема: Юмор • Форум: Юмор

Ответов: 187
Просмотров: 13420
Начал править чужой код (Отобразить)
EuGen Отправлено: 25 Октября, 2013 - 09:17:32 • Тема: Вредоносный php.net • Форум: Прочее

Ответов: 9
Просмотров: 93
Resolved
EuGen Отправлено: 24 Октября, 2013 - 12:30:15 • Тема: Вредоносный php.net • Форум: Прочее

Ответов: 9
Просмотров: 93
Всё верно, вчера, 23-го октября, около 02 PM google добавил все домены php.net (lxr, wiki, bugs и т.п.) и чуть позже - сам php.net в список вредоносных ресурсов.
Точных причин я не смог узнать. В настоящее время создан тикет. Дальшейшее развитие событий, полагаю, определится в ближайшее время.
EuGen Отправлено: 23 Октября, 2013 - 13:50:00 • Тема: методы дочернего класса с одним изменением • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 908
PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.    public function a(){ echo 'something to do'.PHP_EOL; }
  4.    public function b0($x){ echo 'nothing to do with '.$x; }
  5.    public function b1($x){ echo 'nothing to do with '.$x; }
  6.    public function b2($x){ echo 'nothing to do with '.$x; }
  7. }
  8.  
  9. class Bar extends Foo
  10. {
  11.    public function __call($method, $args)
  12.    {
  13.       if(preg_match('/^c/', $method) &&
  14.          method_exists($this, $parent = preg_replace('/^c/', 'b', $method)))
  15.       {
  16.          $this->a();
  17.          call_user_func_array([$this, $parent], $args);
  18.       }
  19.    }
  20. }
  21.  
  22. $obj = new Bar;
  23. $obj->c1('baz'); //valid
  24. $obj->a3('baz'); //invalid
  25. $obj->c5('baz'); //invalid

?
EuGen Отправлено: 23 Октября, 2013 - 10:10:18 • Тема: ФСБ будет контролировать весь интернет-трафик в России • Форум: Новости веб-технологий

Ответов: 8
Просмотров: 96
Мелкий пишет:
Интересно, как предлагается регулировать шифрованный трафик. Т.е. провайдер будет иметь право писать только шифрованный трафик и его отдавать, или MITM принудительно внедрят?

Наиболее вероятно. Сертификаты *.* - и большинство неграмотных пользователей попросту нажмут в браузере "игнорировать и продолжить" в окне предупреждения о несоответствии сертификата. Остальные - просто будут вынуждены искать обходные пути. Но не думаю, что надолго. Логичный шаг - введение лицензирования на шифрование. Например, выдавать ключи только "проверенным" - тем, кто пришёл и согласовал в соответствующих органах это (разумеется, у таких органов останутся закрытые ключи) - и только для юр. лиц. Введение белых списков, опять же - и т.п. Вариантов ужесточения можно придумать много. Невозможно выиграть у кого-либо в игру, в которой этот кто-либо устанавливает правила.
EuGen Отправлено: 21 Октября, 2013 - 17:32:03 • Тема: Получить последнюю строку файла • Форум: Вопросы новичков

Ответов: 32
Просмотров: 1806
armancho7777777
Не уверен, как прокомментировать последнее сообщение. Поскольку обычно я придерживаюсь конструктивизма, то неплохо было бы узнать, в чём состоят (и в каком объеме) вышеупомянутые единицы массы моих ненужных комментариев. На всякий случая, я, конечно, вспомнил мои последние "объемные" комментарии - наподобие этого, этого или этого. Больше в обозримом прошлом мною не было ничего создано. Поскольку скрывать мне особенно нечего, то всегда можно обратиться к данному списку. Дабы не возникало эффекта "оправдания" - всё это приведено лишь по той причине - что Вы - достаточно давно на конференции и степень доверия к Вам много выше, чем к иным её посетителям.

По данной теме - я решил уточнить исходную проблему, отметив при этом, как раз-таки верную на мой взгляд мысль пользователя SAD о том, что, скорее всего, исходный вопрос возник из-за неверного её понимания (и я всего лишь несколько поправил высказывание данного пользователя). Можно считать это ответом на вопрос "как бы сделал я" - то есть "я бы сначала выяснил".

Хотелось бы избежать обсуждения конкретных пользователей в данной теме, поскольку это будет вне топика. Все предложения/жалобы/нарекания я охотно выслушаю через сервис личных сообщений.
EuGen Отправлено: 21 Октября, 2013 - 15:44:06 • Тема: Создать двумерный массив • Форум: Вопросы новичков

Ответов: 2
Просмотров: 170
Что такое "Название"? Как можно объединить в CSV-файл строки с предположительно разным числом ключей/значений? Пример, более наглядный, чем имеющийся, сильно повысит шанс на корректный ответ.
EuGen Отправлено: 21 Октября, 2013 - 13:19:13 • Тема: Интересные задачи по SQL • Форум: SQL и Архитектура БД

Ответов: 25
Просмотров: 1814
Используется СУБД MySQL. Дана таблица test. У неё есть два поля id и title - требуется добавить новую колонку, например, new - значение в которой будет увеличиваться каждые 100 строк по символам английского алфафита. То есть 1-100 строка значение 'A', 101-200 строка значение 'B' и т.п. После значения 'Z' процесс циклически повторяется (то есть начинается снова с 'A').
Требуется сделать это одним запросом (предполагается, что соответствующий ALTER-DDL для добавления колонки new уже сделан).

вариант (Отобразить)
EuGen Отправлено: 21 Октября, 2013 - 12:36:24 • Тема: Получить последнюю строку файла • Форум: Вопросы новичков

Ответов: 32
Просмотров: 1806
avtor.fox
Если уже делать через внешний вызов, то почему не tail -n 1 ?

tuareg пишет:
armancho7777777 А PHP_EOL нельзя использовать вместо

Нет, поскольку считывание идёт в один байт. Если PHP_EOL будет использоваться под Win, то равенства, очевидно, не произойдёт никогда, ведь один байт никогда не будет равен двум сразу.

armancho7777777 пишет:
if($strlen && ($char == "\r" || $char == "\n"))

Так проверять перенос строки - некорректно, поскольку в зависимости от OS перенос строки может быть разным. Такой же код посчитает возврат каретки переводом строки в *nix, например, что неверно.

Правильная мысль:
SAD пишет:
а не проще ее хранить в отдельном файле? и перезаписывать

- а точнее, для начала ответить на вопрос - зачем это нужно? Подозреваю, что это попытка решить не ту проблему не тем способом.

Страниц (594): В начало « ... 13 14 15 16 [17] 18 19 20 21 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB