2.8 KiB
2.8 KiB
🌐 Символы, требующие экранирования в теле HTTP-запроса
В теле HTTP-запроса (в URL, JSON, form-data, XML и других форматах) некоторые символы должны быть экранированы, чтобы не нарушить синтаксис или не вызвать ошибку интерпретации данных.
🔒 Символы, которые нужно экранировать (URL encoding)
Символ | Назначение / причина экранирования | Кодировка (URL encoding) |
---|---|---|
(пробел) |
Разделитель — не допускается в URL | %20 или + |
" |
Строковый литерал в JSON/XML | %22 |
' |
Апостроф (может нарушить SQL/XML/HTML) | %27 |
< |
Тег в HTML/XML | %3C |
> |
Тег в HTML/XML | %3E |
& |
Разделитель параметров | %26 |
= |
Разделяет имя и значение | %3D |
? |
Начало query-строки | %3F |
/ |
Разделитель пути | %2F |
\ |
Экранирование в JSON/JS | %5C |
# |
Якорь в URL | %23 |
% |
Префикс для escape-последовательностей | %25 |
: |
Разделитель схемы URL | %3A |
@ |
В URL может обозначать логин | %40 |
+ |
Обозначает пробел в application/x-www-form-urlencoded |
%2B |
{ } |
JSON-структуры | %7B %7D |
[ ] |
Массивы / JSON | %5B %5D |
, |
Разделитель в CSV, JSON и др. | %2C |
📌 Пример экранирования URL
Исходный URL:
https://example.com/api?query=тест & значение
После экранирования:
https://example.com/api?query=%D1%82%D0%B5%D1%81%D1%82%20%26%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
📎 Пример в JSON
JSON с кавычками и спецсимволами:
{
"message": "Привет \"мир\" <script>alert('xss');</script>"
}
При передаче должно быть:
{
"message": "Привет \\"мир\\" \\u003Cscript\\u003Ealert(\\'xss\\');\\u003C/script\\u003E"
}
🧠 Совет
- В URL используйте
encodeURIComponent()
(JavaScript) или аналогичные функции в других языках. - В JSON-строках используйте escape-символ
\
и Unicode-коды. - Для
application/x-www-form-urlencoded
— кодируйте с учётом+
вместо пробела.