2016-06-09 12 views
-3

Was ist die sicherste Art des domänenübergreifenden Zugriffs? Was sind die Kompromisse?Was ist eine gute Lösung für den domainübergreifenden Zugriff?

Ich weiß, wir können Cross-Origin-Access-Header setzen, aber das würde meinen Server brauchen, um die Liste der Server im Voraus zu wissen.

+0

warum die down-stimme? Wenn Sie nach unten abstimmen, lassen Sie mindestens einen Kommentar – treefrog

+2

Einverstanden. Bring dich wenigstens auf Null zurück. Es ist wahrscheinlich, dass deine Frage ziemlich breit ist. Beantworten kann es weiter und weiter und weiter ... – Chewy

+2

Es ist auch ziemlich meinungs basiert. Es hat auch ungefähr 0 Forschung getan. – csmckelvey

Antwort

1

Sie müssen die Liste der Server nicht vorher wissen, da Sie festlegen können, dies ist jedoch nicht so sicher, da es anderen Websites ermöglicht, Ihre Dienste zu nutzen. Achten Sie also beim Erstellen Ihrer Header darauf, dass Sie Access-Control-Allow-Origin von einer eingeschränkten Liste zulassen. Ich verwende nur einen regulären Ausdruck, um zu vergleichen, da wir von mehreren erlauben. Wenn ich verifiziere, dass es eine Übereinstimmung gibt, gebe ich den Ursprung der Anfrage in der Kopfzeile zurück. Also, wenn ich auf etwas wie web.*energydomain.com übereinstimmen und der Ursprung ist , dann gebe ich zurück Access-Control-Allow-Origin: webservices.energydomain.com Das sagt dem rufenden Dienst (und jedem, der zuhört), dass ich von diesem Ursprung und nur diesem Ursprung akzeptiere, selbst wenn ich von webstart.energydomain annehmen könnte. com.

Also mit Feder haben wir einen Filter erstellt.

@Component 
@Order(Ordered.HIGHEST_PRECEDENCE) 
public class CORSFilter implements Filter { 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     response.setHeader("Access-Control-Allow-Credentials", "true") 

     //If this is a pre-flight request, make sure that we are allowing them 
     if ("OPTIONS" == request.method) { 
      response.setHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS") 
      response.setHeader("Access-Control-Max-Age", "604800") 
      response.setHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Origin, Vary, Cookie, Key") 

      //Check to see that the referrer/origin matches the set of allowed origins in the application configuration 
      String referrer = request.getHeader("Origin") 
      if (referrer?.matches(ServerProperties.instance.accessControlAllowOriginRegEx)) { 
       response.setHeader("Access-Control-Allow-Origin", referrer) 
      } 
     } else { 
      //set other headers here and continue chain (we don't bother continuing chain on preflight) 
      chain.doFilter(request, response) 
     } 
    } 

Sie können dies auch auf .htaccess tun

<FilesMatch "\.(ttf|otf|eot|woff)$"> 
    <IfModule mod_headers.c> 
     SetEnvIf Origin "http(s)?://(www\.)?(webservices.energydomain.com|webservicesmo.energydomain.com|webservicestest.energydomain.com)$" AccessControlAllowOrigin=$0 
     Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    </IfModule> 
</FilesMatch> 

ich lieber versuchen, den Preflight Verkehrslärm zu reduzieren und sie alle zusammen zu vermeiden. Insbesondere verwende ich xdomain. Es war ziemlich einfach für mich einzurichten, wenn Sie eckig oder jQuery verwenden. Fügen Sie auf Ihrem Anwendungsserver eine proxy.html hinzu, wie in der Hilfe auf dem folgenden Link angegeben. Fügen Sie einige Tags hinzu, die sich auf die js-Dateien auf Ihrem "Client" und Viola beziehen, keine weiteren Vor-Flights. Dies wird in einen iFrame eingefügt, um die Notwendigkeit einer Korskontrolle zu vermeiden. Sie können die Ursprünge wie bei den CORS-Preflights, wie oben erklärt, immer noch steuern, sie werden nur vermieden.

https://github.com/jpillora/xdomain

+0

danke, dass du dir die Zeit genommen hast zu antworten. Wenn ich keinen Zugang zum Server habe, welche Alternativen habe ich? – treefrog

+0

CORS wurde im Hinterkopf, um Cross-Site-Scripting-Angriffe zu verhindern. Wenn Sie also keinen Zugriff auf den Server haben, sollten Sie den Zugriff auf diese Dienste verhindern (oder mit Erlaubnis erlauben). – Chewy

+0

Ist diese Domain ähnlich wie easyxdm im Konzept? – treefrog

Verwandte Themen