2015-01-12 2 views
2

Я прочитал статью о asp.net.MVC EnableCors мы можем быть уверены в происхождении?

Они используют пароль grand_type Oauth2 в javascript-вызове ajax для WebApi.

Это безопасно, если мы не разрешаем использование CORS (совместное использование ресурсов по перекрестным источникам). Но я хочу разрешить другому сайту использовать этот api с auth2.

Мой вопрос: Как я могу быть уверен, что они не отправили на мой сервер. Некоторые можно делать вид, что на этом сайте (например, изменение хост-файл в «System32 \ Drivers \ Etc \ хостов» или локальный DNS)

Является ли EnableCors атрибут двойную проверку в браузере и на хосте для срока действия хост или это вещь браузера?

Другой сайт только JavaScript, не на стороне сервера, как осина или PHP ...

Если вы можете предоставить документацию по безопасности для Cors, это будет очень приятно.

Танк вас.

EDIT: Я не спрашиваю, как его использовать. Я спрашиваю, может ли обойденный хозяин быть обойден.

Как вызов, сделанный ajax на javascript, это клиент ip, который я получаю, когда запрос сделан, я получаю HTTP referer для проверки на стороне сервера, но я не доверяю ему, потому что клиент может его изменить ,

Я спрашиваю, могу ли я доверять заголовку «Access-Control-Allow-Origin», если сервер проверяет его или только для браузера, минуя правила безопасности в самом браузере. И если я не могу доверять ему, есть ли способ получить доверенный запрос происхождения.

+1

Вы можете создать белый список разрешенных IP-адресов, которые могут получить доступ к вашему веб-сайту api –

+0

, можете ли вы предоставить документацию, пожалуйста? Это может в конечном итоге ответить на вопрос. – Benoit

ответ

2

CORS не об аутентификации ... речь идет о сотрудничестве.

Это способ помочь другим сайтам не попасть в неприятности.
По умолчанию браузер клиента запрещает запросы на перекрестный поиск. Но он может спросить вашего сервера: «Эй, парень, ты не против, если код клиента, исходящий с этого сервера, получает от вас данные?»
Если вы не включили CORS для любого сайта по умолчанию, то код клиента не может читать данные с вашего сервера. Но когда разработчик сознательно вводит такое поведение, он может попросить вас об этом явном разрешении.

CORS - это способ защиты третьих лиц, а не ваших данных.

После запроса разрешена, она затем должна быть проверка подлинности и авторизация, как обычно, если вы не заботитесь =)

Таким образом, нет необходимости для проверки заявлений происхождения. Кроме того, эта информация о происхождении НЕ ДОЛЖНА участвовать в информации аутентификации/авторизации. Если вам действительно нужна аутентификация запрашивающей стороны, тогда другой сервер ДОЛЖЕН пройти аутентификацию против вашей службы и только после этого обслуживать данные своим клиентам, работая таким образом как прокси.

+0

Танки! это очень ясно. Я должен изменить способ, которым я должен это сделать, сделать oauth, как facebook, с помощью метода connect, а не использовать grand_type = password. Я буду использовать авторизацию с refresh_token. – Benoit

2

Продление моего комментария.

Вот действие фильтр, который ограничивает доступ только для всех IP-адресов для определенных из них, за исключением:

public class RestrictIpAttribute : ActionFilterAttribute 
{ 
    private readonly string[] _allowedIPs; 
    public RestrictIpAttribute(string[] allowedIPs) 
    { 
     _allowedIPs = allowedIPs; 
    } 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     var context = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase; 
     string userIP = context.Request.UserHostAddress; 

     if (_allowedIPs.All(ip => ip != userIP)) 
     { 
      actionContext.Response = 
       new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) 
       { 
        Content = new StringContent("Unauthorized IP Address") 
       }; 
     } 
    } 
} 

Вы можете поместить разрешенный IP-адрес в базу данных, конфигурационный файл или туда, куда вы хотите.

Как примечание стороны, это решение не связано непосредственно позволяя CORS

+0

Танк для примера фильтра действий. Как я могу видеть, это клиентский браузер, который делает запрос, в ajax. Поэтому я не могу использовать ваше решение. но +1 для хорошего примера ;-) Я обновил свой вопрос. – Benoit

+1

Afaik, этот заголовок применяется только для браузера и не проверяется сервером. –

0

Вы можете добавить следующую конфигурацию в вашем web.config.

<configuration> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="http://www.myapp.com" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
</configuration> 
+0

Я не спрашивал, как его использовать. Я обновляю свой вопрос. Извините меня, если это не ясно, я французский, мой английский не идеален ... – Benoit

Смежные вопросы