Используя Wordpress, кто-то может сказать мне лучший способ санировать вход?

Я разрабатываю приложение, используя Wordpress в качестве CMS.

У меня есть форма с большим количеством полей ввода, которое должно быть санировано, прежде чем сохранено в базе данных.
Я хочу предотвратить инъекцию SQL, имея JavaScript и кодекс PHP введенный и другой вредный кодекс.

В настоящее время я использую свои собственные методы, чтобы санировать данные, но я чувствую, что могло бы быть лучше использовать функции, которые использует WP.

Я посмотрел на Подтверждение правильности данных в Wordpress, но я не уверен на том, сколько из этих функций я должен использовать, и в какой заказ. Кто-либо может сказать то, что функции WP являются лучшими, чтобы использовать?

В настоящее время я «санирую» свой вход, делая следующее:

  1. Поскольку знаки с акцентами (é, ô, æ, ø, å) были сохранены забавным способом в Базе данных (даже при том, что к моим столам накрывают ENGINE=InnoDB, DEFAULT CHARSET=utf8 и COLLATE=utf8_danish_ci), я теперь преобразовываю поля ввода, у которых могут быть акценты, используя htmlentities ().

  2. Когда создание SQL натягивает, чтобы ввести данные, я использую mysql_real_escape_string().

Я не думаю, что этого достаточно, чтобы предотвратить нападения все же. Так предложения к улучшению значительно ценится.

14
задан Steven 24 January 2010 в 12:29
поделиться

1 ответ

Каковы средства его уменьшения?

Это зависит от того, хотите ли вы уменьшить высоту пика загрузки ЦП или длительность ваших длительных вычислений или и того, и другого.

Поэтому, если ваше приложение использует 100% CPU в течение одной минуты, вы хотите «уменьшить» его до «50% более 2 минут» или «100% более 30 секунд» или «50% более 1 минут»?

Все они отличаются друг от друга.

Например, скажем, вы хотели убедиться, что приложение никогда не использует больше 50% вычислительных мощностей двухъядерной машины (я не говорю, что это хорошо, я просто приведу пример), то есть очень простой способ сделать это: Для параметра «CPU affinity» программы можно задать только одно из двух ядер. Обратите внимание, что я не рекомендую делать это в вашем случае: Все, что я говорю здесь, для полноты, что он существует, он имеет действительные использования, и есть причина, почему и Linux, и Windows разработчики написали API и конечных пользователей команды, позволяющие установить сходство CPU на индивидуальной основе (эти функции полностью доступны как для программистов, так и для конечных пользователей).

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

Допустимо ли, чтобы процесс занимал 99% ЦП, когда не выполняется другой процесс?

Это зависит от ваших требований. Обычно да, это не только приемлемо, но и распространено.

-121--4859714-

Seq.collect сначала сопоставит каждый элемент последовательности с новой последовательностью и распрямит эти последовательности на одну.

Seq.map сопоставит каждый элемент с новым элементом .

-121--239074-

Ввод «sanitization» является фиктивным.

Вы не должны пытаться защитить себя от проблем инъекции, фильтруя (*) или избегая ввода, вы должны работать с необработанными последовательностями до тех пор, пока вы не поместите их в другой контекст. В этот момент вам нужна правильная функция перехода для этого контекста, которая представляет собой mysql _ real _ escape _ string для запросов MySQL и htmlspecialchars для вывода HTML.

(WordPress добавляет свои собственные ускользающие функции, как esc _ html , которые в принципе ничем не отличаются.)

(*: ну, за исключением специфичных для приложения требований, как проверка адреса электронной почты действительно адрес электронной почты, обеспечение пароля разумно, и так далее. Есть также разумный аргумент для фильтрации управляющих символов на этапе ввода, хотя это редко делается на самом деле.)

Я сейчас преобразую поля ввода, которые могут иметь акценты, используя htmlentities ().

Я настоятельно советую не делать этого. База данных должна содержать необработанный текст; вы значительно усложняете выполнение операций с базами данных в столбцах, если вы закодировали их как HTML. Вы избегаете символов, таких как < и ", одновременно с символами, отличными от ASCII.Когда вы получаете данные из базы данных и используете их по какой-то другой причине, чем копирование их на страницу, теперь у вас есть ложные HTML-переходы в данных. Не переходите к HTML до последнего момента записи текста на страницу.

Если у вас возникли проблемы с вводом в базу данных символов, отличных от ASCII, это другая проблема, которую следует решить в первую очередь вместо того, чтобы использовать неустойчивые обходные пути, такие как хранение данных в кодировке HTML. Здесь есть несколько сообщений о том, как заставить PHP и базы данных говорить о правильных UTF-8, но главное, чтобы убедиться, что ваши HTML выходные страницы сами правильно обслуживаются как UTF-8 с помощью Content-Type header/meta. Затем проверьте, что для подключения MySQL установлено значение UTF-8, например mysql _ набор _ charset () .

При создании последовательности SQL для ввода данных используется mysql_real_escape_string ().

Да, это правильно. Пока вы делаете это, вы не уязвимы для SQL injection. Вы можете быть уязвимы к вводу HTML (вызывая XSS), если вы находитесь на выходе HTML в конце базы данных, а не на выходе шаблона. Поскольку любая строка, которая не прошла через базу данных (например, извлекается непосредственно из $ _ GET ) и не будет обработан HTML.

16
ответ дан 1 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: