Предоставление пользователям возможности представить код, что заменить в php? - PullRequest
1 голос
/ 04 октября 2011

Привет, я планирую, чтобы пользователи могли отправлять некоторые фрагменты кода (php, java, javascript c ++ и т. Д., Что бы они ни хотели, я имею в виду).лучшая практика, чтобы сделать его безопасным для моего сайта?:))

я имею в виду, какие теги / символы / строки, которые нужно экранировать в php, передают строку кода?

Ответы [ 4 ]

7 голосов
/ 04 октября 2011

Если вы намереваетесь отобразить код на экране, вам не нужно ничего экранировать или заменять, прежде чем сохранять его в своей базе данных (если вы намереваетесь сохранить его). Это, конечно, не относится к экранированию для вставки базы данных, например, через mysql_real_escape_string() (или эквивалентную процедуру очистки вашей СУБД). Этот шаг все еще абсолютно необходим.

При отображении кода, убедитесь, что:

  1. Вы НЕ оцениваете отправленный код с помощью eval() или системного вызова.

  2. При отображении кода обратно в браузер, экранируйте его с помощью htmlspecialchars(). Никогда не отображайте его без экранирования, иначе вы представите уязвимости межсайтового скриптинга.

1 голос
/ 04 октября 2011

Используйте заполнители в своих запросах, и вам даже не придется избегать ввода. Заполнители, обязательные и подготовленные операторы, безусловно, являются предпочтительным методом.

Это быстрее для любого запроса, превышающего 1, так как вы можете повторно использовать маркеры и просто изменить ввод.

Это безопаснее. Строка не интерпретируется с запросом ... никогда. То, что вы храните, это то, что вы получаете.

Мне нужно узнать немного больше о вашей целевой SQL, чтобы привести соответствующие примеры, но вот несколько ссылок:

Связывание в стиле PDO: http://docs.php.net/pdo.prepared-statements

Привязка в стиле MySqli: http://docs.php.net/manual/en/mysqli-stmt.bind-param.php

Когда вы прочитаете его обратно, отобразите с помощью

htmlspecialchars($string, ENT_QUOTES);

Параметр ENT_QUOTES обеспечивает экранирование одинарных и двойных кавычек.

1 голос
/ 04 октября 2011

Я не эксперт (мне только об этом сказали вчера), но, по крайней мере, для HTML, вы можете попробовать использовать htmlentities (посмотрите на this ). Как только что-то было конвертировано с использованием htmlentities, оно становится простым текстом, поэтому, если открыть его в браузере, вы увидите тег и все (например, будет записано <a href="blah blah">), если оно записано в журнал или что-то еще, а затем Открыв в текстовом редакторе, вы получите некоторые символы и shnaz, которые представляют html-сущности.

Если вам нужно конвертировать обратно, вы можете использовать функцию html_entity_decode, я думаю, но я собираюсь сделать предположение и предположить, что вам не нужно конвертировать обратно.

Что касается других языков, я понятия не имею, что вам следует делать.

1 голос
/ 04 октября 2011

Вам не нужно ничего избегать (кроме обычной санитарии mysql), если вы не собираетесь автоматически запускать это.

...