2017-09-04 11 views
0

私はこれをよく理解していません。ウェブサイトのHTMLコンテンツを取得するためのシンプルなサーバーサイドコードを書くことができます。私のローカルPCまたは任意のホスティングで実行し、任意のWebサイトから任意のページを取得します。しかし、これはjavaScriptで行うことはできませんでしたか?CORSサーバー側とクライアント側?なぜ、1つは動作しますが、もう1つは動作しませんか?

どのような種類のアプリケーションがリクエストを行っているのかリモートホストが知ることは可能ですか?クロスオリジン要求はセキュリティ目的では許可されていませんか?どのように私はサーバー側のコードを使用してまったく同じ要求を行うことができますか?このコードをローカルまたはリモートでどこでも実行できますか?以下は、WeatherサイトからHTMLページコンテンツを取得するための簡単な例です。これはうまくいきます。しかし、私はJavaScriptコード内からこれを行うことはできませんか?意味がありません。

public static class WeatherManager 
{ 
    private static HtmlDocument document = new HtmlDocument(); 

    public static MyWeather GetWeather() 
    { 
     try 
     { 
      var web = new HtmlWeb(); 
      document = web.Load("http://www.weatheroffice.gc.ca/city/pages/on-143_metric_e.html"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Weather is not loaded"); 
     } 

     var mainContent = document.DocumentNode.SelectSingleNode("//*[@id='mainContent']"); 
     var nownode = mainContent.SelectSingleNode("//section[1]/details/div/div"); 
     var forecastnodes = mainContent.SelectNodes("//section[2]/details/table[1]/tr[2]/td"); 

     // Do some processing.... 
    } 
} 

しかし、私は角度から同様の要求をしようとする場合(またはいずれかの私はJS libに思う)

getWeatherForecast() { 
    const url = 'https://weather.gc.ca/city/pages/on-143_metric_e.html'; 
    return this.$http.get(url); 
} 

私は私が知っているこの

enter image description here

のようなものを取得します。 .. CORS okですが、その目的がセキュリティ目的のために行われた場合、私はこれらのCORSリクエストをどうすればいいのでしょうか?たとえば、上記のサーバーサイドコードなどです。

答えて

3

これはjavaScriptで実行できませんでしたか?

はい、これは  —です。ブラウザでは表示できません。 (JVMがjavax.script経由でJavaScriptをサポートしているので)あなたは、リモートホストのために何を知ることができるということですどのように

など、ノード内、またはJVMにJavaScriptでリクエストを作ることができ、またはWindows上のMetroアプリでアプリケーションの一種がリクエストをしていますか?

これはありません。 ブラウザは、サーバではなく、同じオリジンポリシーを適用します。

サーバーサイドコードを使用して同じリクエストを送信するにはどうすればよいですか?

...

...しかし、そのセキュリティ上の目的のために行われていれば、私はとにかくこれらCORS要求を行うことができますどのように来る、私は上記のサーバー側のコードとして例えば、好きですか?

サーバーサイドのコードは、潜在的に機密のクライアント側の情報にアクセスできないためです。 :

同じ起点ポリシーは、認証済みセッションを使用するサイトを保護するのに役立ちます。次の例は、同一起点ポリシーなしで発生する可能性がある潜在的なセキュリティリスクを示しています。ユーザーが銀行のWebサイトにアクセスしていて、ログアウトしていないとします。その後、ユーザーは銀行サイトからデータを要求するバックグラウンドで実行されている悪質なJavaScriptコードを持つ別のサイトに行きます。ユーザーはまだバンキングサイトにログインしているため、悪意のあるコードはユーザーがバンキングサイトで行うことができるすべてのことを行う可能性があります。たとえば、ユーザーの最後のトランザクションのリストを取得したり、新しいトランザクションを作成したりすることができます。これは、ブラウザが銀行サイトのドメインに基づいて銀行サイトにセッションCookieを送受信できるためです。

悪意のあるサイトにアクセスしたユーザーは、訪問しているサイトには銀行セッションCookieにアクセスできないことが予想されます。 JavaScriptが銀行セッションクッキーに直接アクセスすることはできませんが、銀行サイトのセッションクッキーを使用して銀行サイトに依頼を送受信することもできます。スクリプトは基本的にユーザが行うのと同じことを行うことができるため、銀行サイトによるCSRFの保護でさえ効果的ではありません。

関連する問題