Проблема с PHP - при вставке - PullRequest
1 голос
/ 31 марта 2011

Эй, Я владею http://ilikeyou.tk/ веб-сайтом, похожим на Facebook. По сути, пользователи могут добавить фразу и / или фотографию и понравиться ей на Facebook. Недавно, когда я протестировал несколько вещей, я обнаружил, что когда я вставляю </ в текстовом поле и создать страницу, она перепутается с подобным списком. (Вы можете попробовать опубликовать </ и вернуться на домашнюю страницу, прокрутите вниз до «Недавние лайки» и посмотрите его) На таких сайтах, как твиттер и фейсбук, такого никогда не бывает .. так что может быть решение .. Есть предложения?

P.S; Кроме того, когда я пытаюсь вставить ссылку на фотографию (http://profile.ak.fbcdn.net/hprofile-ak-snc4/188178_139794909415037_3755895_n.jpg) вся страница указателя отключается (я все еще могу перейти на такие страницы, как ilikeyou.tk/1/, но не могу получить доступ к ilikeyou.tk ...). При удалении ссылки из базы данных все снова работает нормально.

P.S2; Извините за мой плохой английский

Спасибо заранее.

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

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

Так что если у вас есть $phrase, поступающий откуда угодно (не только из вашей базы данных), неправильно делать это:

echo $phrase;

Вы должны сделать это вместо:

echo htmlspecialchars($phrase);

Для получения дополнительной информации вы можете найти в SO или Google «XSS» или «межсайтовый скриптинг».

0 голосов
/ 31 марта 2011

Ну конечно.Я также мог бы ввести это в ваше текстовое поле:

<script type="text/javascript">
    window.location = 'http://mysite.com';
</script>

Это украдет всех ваших посетителей и отправит их на мой сайт.

Вы не можете доверять вводу пользователя ,Когда-либо.И вы никогда не должны доверчиво вставлять пользовательский ввод в другой контент, не подвергнутый анализу.Я надеюсь, что вы хотя бы знаете о SQL-инъекции ?

Для вывода в HTML вы можете удалить все, что похоже на тег, используя strip_tags илиэкранирующие символы, которые имеют особое значение в HTML, используя htmlentities.Возможно, вы должны использовать смесь обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...