2014-01-25 4 views
0

В настоящее время я извлекаю данные из RSS-канала (XML). Примером может быть:Извлеченные данные и XSS

Bob's dog 

Теперь у меня есть проблема: Я хотел бы защитить себя от XSS из-за данных, поступающих от иностранного источника. Поэтому я иду вперед и избежать данных, результат:

Bob's dog 

Теперь, когда я пытаюсь напечатать данные, которые я распаковывается, он печатает:

Bob's dog 

... вместо того, чтобы ...

Bob's dog 

Вопрос: Как я могу защитить себя от XSS, но все же распечатать данные, избегая двойных сущностей?

+0

Использование регулярного выражения для фильтрации входных данных может предотвратить атаку XSS. Вы используете только альфа-числовые символы, пробелы и символы с кодированными символами. Примером такого регулярного выражения может быть «([A-Za-z0-9 \\ s] +) | (& # \\ d {1,3};)". Затем вы можете отменить регулярное выражение и удалить совпадения; Например. ([^ A-Za-z0-9 \\ s] +) | ([^ (& # \\ d {1,3};)]) – JohnWO

+1

Сначала декодируем строку, которую вы получили, и после этого используйте 'htmlspecialchars ($ строка, ENT_QUOTES, 'UTF-8') '. – PeeHaa

+0

Это кажется радикальным. Разве нет возможности сначала декодировать объекты, а затем снова закодировать их вместе с другими специальными символами? – user3228959

ответ

1

Сначала вы хотите декодировать строку, используя либо html_entity_decode(), либо htmlspecialchars_decode(). И после этого перекодировать строки, чтобы предотвратить XSS с помощью:

htmlspecialchars($theString, ENT_QUOTES, 'UTF-8'); // or whatever encoding 

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

Таким образом, вы все равно будете защищены.

Смежные вопросы