У меня есть RESTful API, который может возвращать как JSON
, так и XML
.
Скажем, например, что сделан запрос на все комментарии к артефакту, такому как документ как таковой: GET /document/DOCUMENT_ID/comments.json
. Ответ выглядит так:
[
{
"created_time": 1304598075,
"text": "<script type=\"text/javascript\">alert(document.cookie)</script>",
"user_id": 2293,
"id": 184124
},
{
"created_time": 1304598043,
"text": "It's over ninethousaaaaaanddd!!!",
"user_id": 2293,
"id": 184122
}
]
В моем собственном сервисе первый комментарий будет экранирован XSS, прежде чем представлен. Но когда к нему обращались через API, мне пришлось бы доверять разработчику API для выполнения экранирования.
Если API реализован в веб-сервисе, представленном через браузер, вектор атаки вполне реален.
С другой стороны, если API реализован в настольном приложении или мобильном приложении - экранирование XSS будет полной помехой и не нужно.
Должен ли я экранировать все строки, возвращаемые через API? Или я должен реализовать настройку, чтобы при регистрации стороннего приложения разработчик API мог указать, хочет ли он экранированные ответы или нет?
Было бы интересно узнать, как другие справились с этой проблемой.