Я видел статьи и посты по всей теме (включая SO) по этой теме, и преобладающим комментарием является то, что политика одного и того же происхождения предотвращает POST формы через домены. Единственное место, где я видел, что кто-то предполагает, что политика одного и того же происхождения не распространяется на посты, находится здесь .
Я хотел бы получить ответ из более "официального" или официального источника. Например, кто-нибудь знает RFC, который рассматривает, как тот же источник влияет или не влияет на форму POST?
уточнение : я не спрашиваю, может ли GET или POST быть создан и отправлен в любой домен. Я спрашиваю:
- если Chrome, IE или Firefox разрешат контенту из домена «Y» отправлять POST в домен «X»
- если сервер, получающий POST, вообще увидит какие-либо значения формы. Я говорю это потому, что большинство онлайн-дискуссий записывают тестеров, которые сообщают, что сервер получил сообщение, но все значения формы были пустыми.
- Какой официальный документ (то есть RFC) объясняет, каково ожидаемое поведение (независимо от того, что браузеры в настоящее время реализовали).
Между прочим, если одно и то же происхождение не влияет на POST формы - это делает более очевидным, почему необходимы токены против подделки. Я говорю «несколько», потому что кажется слишком легким верить, что злоумышленник может просто выполнить HTTP GET, чтобы получить форму, содержащую токен противодействия фальсификации, и затем создать незаконный POST, который содержит этот же токен. Комментарии?
Ответы:
Такая же политика происхождения применима только для языков программирования на стороне браузера. Таким образом, если вы попытаетесь выполнить публикацию на сервере, отличном от исходного сервера, используя JavaScript, то вступит в действие та же политика происхождения, но если вы отправите сообщение непосредственно из формы, то есть действие указывает на другой сервер, такой как:
и нет никакого javascript, участвующего в публикации формы, то такая же политика происхождения не применяется.
Смотрите Википедию для получения дополнительной информации
источник
Можно создать произвольный запрос GET или POST и отправить его на любой сервер, доступный браузеру жертвы. Это включает устройства в вашей локальной сети, такие как принтеры и маршрутизаторы.
Существует много способов создания эксплойта CSRF. Простую атаку CSRF на основе POST можно отправить с помощью
.submit()
метода. Более сложные атаки, такие как межсайтовая загрузка файлов CSRF-атаками, будут использовать CORS-поведение xhr.withCredentals .CSRF не нарушает политику одного и того же происхождения для JavaScrip t, поскольку SOP касается JavaScript, считывающего ответ сервера на запрос клиента. Атаки CSRF не заботятся об ответе, они заботятся о побочном эффекте или изменении состояния, вызванном запросом, таким как добавление пользователя с правами администратора или выполнение произвольного кода на сервере.
Убедитесь, что ваши запросы защищены с помощью одного из методов, описанных в Шпаргалке по профилактике OWASP CSRF . Для получения дополнительной информации о CSRF обратитесь к странице OWASP на CSRF .
источник
Такая же политика происхождения не имеет ничего общего с отправкой запроса на другой URL (другой протокол, домен или порт).
Это все об ограничении доступа к (чтению) ответных данных с другого URL. Таким образом, код JavaScript на странице может публиковать в произвольном домене или отправлять формы на этой странице в любое место (если форма не находится в iframe с другим URL).
Но что делает эти POST-запросы неэффективными, так это то, что в этих запросах отсутствуют токены защиты от подделки, поэтому другие URL игнорируют их. Более того, если JavaScript пытается получить эти маркеры безопасности, отправляя запрос AJAX на URL жертвы, он запрещает доступ к этим данным в соответствии с Same Origin Policy.
Хороший пример: здесь
И хорошая документация от Mozilla: здесь
источник