Я читал о CORS, и я думаю, что реализация проста и эффективна.
Однако, если я чего-то не упускаю, я думаю, что в спецификации отсутствует большая часть. Насколько я понимаю, это иностранный сайт, который решает, исходя из происхождения запроса (и необязательно включая учетные данные), разрешать ли доступ к его ресурсам. Это нормально.
Но что, если вредоносный код на странице хочет ПОЧТАТЬ конфиденциальную информацию на чужом сайте? Заграничный сайт, очевидно, собирается аутентифицировать запрос. Следовательно, снова, если я чего-то не пропущу, CORS фактически упрощает кражу конфиденциальной информации.
Я думаю, что было бы гораздо более разумным, если бы исходный сайт мог также предоставить неизменный список серверов, к которым доступ к этой странице разрешен.
Таким образом, расширенная последовательность будет:
- Поставьте страницу со списком приемлемых серверов CORS (abc.com, xyz.com и т.д.)
- Страница хочет сделать запрос XHR на abc.com - браузер разрешает это, потому что он в разрешенном списке и аутентификации протекает как обычно.
- Страница хочет сделать запрос XHR на malicious.com - запрос отклонен локально (т.е. браузером), потому что сервер отсутствует в списке.
Я знаю, что вредоносный код все еще может использовать JSONP для выполнения своей грязной работы, но я бы подумал, что полная реализация CORS подразумевает закрытие многосайтовой лазейки тегов script.
Я также проверил официальную спецификацию CORS (http://www.w3.org/TR/cors) и не мог найти упоминания об этой проблеме.