Должен ли я XSS защитить ответы от моего API? - PullRequest
3 голосов
/ 06 мая 2011

У меня есть 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 мог указать, хочет ли он экранированные ответы или нет?

Было бы интересно узнать, как другие справились с этой проблемой.

1 Ответ

2 голосов
/ 06 мая 2011

Нет, вы не должны - обработка XSS должна выполняться тем, что на самом деле собирается показать данные.Многие сторонние элементы управления ASP.NET уже реализуют защиту XSS в отображаемом ими тексте, поэтому вы можете столкнуться с ситуацией, когда текст в двойном коде.

...