Cakephp Security

Я новичок в области безопасности веб-приложений. Я разрабатываю приложение на Cakephp, и один из моих друзей рассказал мне о атаках подделки межсайтовых запросов (CSRF), межсайтовых сценариев (XSS) и т. Д., Не зная, сколько их еще.

Мне нужна помощь в понимании того, как заставить Cakephp защитить мое веб-приложение от них. у нас низкий бюджет, и мы не можем нанять консультанта по безопасности на данный момент. Мы все еще разрабатываем приложение и планируем выпустить его к концу месяца. так что хочу позаботиться о начальных вещах, которые могут помочь мне встать без взлома;)

Ответы на вопрос(2)

Cake можно обеспечить относительно легко (по сравнению с собственно написанными PHP-скриптами):http://www.dereuromark.de/2010/10/05/cakephp-security/

Решение Вопроса

который вы можете развернуть, и тогда вам больше никогда не придется думать о безопасности. Развертывание «анти-XSS» хаков, таких как CakePHPSanitize::clean будет мешать пользователям, блокируя допустимые данные, но при этом не обязательно сделает приложение безопасным. Взломы входной фильтрации в лучшем случае являются меркой запутывания, а не исправлением дыр в безопасности.

Чтобы иметь безопасное веб-приложение, вы должны написать безопасное веб-приложение с нуля. Это означает, прежде всего, внимание к деталям, когда вы помещаете строки из одного контекста в другой. Особенно:

всякий раз, когда вы записываете строку в текстовое содержимое HTML или значение атрибута, HTML-экранируйте ее (htmlspecialchars()) чтобы избежать HTML-инъекций, ведущих к XSS. Это не просто вопрос пользовательского ввода, который может содержать атаки, это правильный способ поместить простой текст в HTML.

Там, где вы используете вспомогательные методы HTML, они должны по умолчанию заботиться об экранировании этих элементов в HTML (если вы не отключите их).escape); очень прискорбно, что в учебнике CakePHP есть плохая практика вставлять неэкранированные строки в HTML для текста вне HTML-помощников.

всякий раз, когда вы создаете SQL-запросы со строковыми значениями, SQL-escape (с соответствующей функцией для вашей базы данных, такой какmysql_real_escape_string).

Если вы используете ORM CakePHP и не пишете свой собственный SQL, вам не нужно беспокоиться об этом.

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

включитьБезопасность компонент для добавления схемы токенов для отправки форм, которая предотвращает XSRF в формах, созданных CakePHP.

 Sela Yair18 июл. 2014 г., 15:24
Есть ли способ выполнить это перед сохранением в базе данных? как и сейчас, я использую h () для переноса эхо-вызовов.
 bobince19 июл. 2014 г., 10:14
(В любом случае вам не нужен HTML-экранированный контент в вашей базе данных. Он не будет выполнять поиск, сортировку или нарезку должным образом.)
 mark06 окт. 2010 г., 16:07
«Очень жаль, что в учебнике CakePHP есть плохая практика вставлять неэкранированные строки в HTML для текста вне HTML-помощников». Я согласен - таким образом, многие не знают, что это действительно плохо.
 bobince06 окт. 2010 г., 11:42
При использовании HTML-помощников,htmlspecialchars() по умолчанию, да, если вы не установите'escape'=>false. mysql_real_escape_string() нет, так как не имеет смысла быть выходящим из SQL HTML-выводом. Это должно произойти при обращении к базе данных (и будет сделано автоматически, если вы используете ORM).htmlspecialchars() необходим при выводе контента без помощника, например, встроенного неформального контента. например.<p>Hello, <?php echo htmlspecialchars($name); ?>!</p>.
 Harsha M V06 окт. 2010 г., 11:26
спасибо за ускоренный курс по безопасности. один вопрос при использовании HTML Helpers - htmlspecialchars () и mysql_real_escape_string () происходят автоматически?
 bobince19 июл. 2014 г., 10:13
@Sela: слой базы данных - неподходящее место для экранирования HTML. Вы не можете предполагать, что все данные будут принимать маршрут form-input => database => HTML-output; Вполне возможно взять входные данные из формы или других источников и отобразить их непосредственно на странице (в этом случае вы пропустили выход), или использовать данные в целях, отличных от HTML (в этом случае у вас есть ненужные экранированные символы), или взять содержимое из базы данных, измените его и запишите обратно в базу данных (в этом случае у вас есть двойной выход и страшный&amp;amp;amp;amp;amp;amp;amp; взрыв). Перенос во время вывода HTML правильный.

Ваш ответ на вопрос