nginx跨域配置


    首先,貼上nginx work的配置

server{
listen 8099;
server_name wdm.test.cn;
location / {

  // 沒有配置OPTIONS的話,瀏覽器如果是自動識別協議(http or https),那么瀏覽器的自動OPTIONS請求會返回不能跨域
  if ($request_method = OPTIONS ) {
    add_header Access-Control-Allow-Origin "$http_origin";
    add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
    add_header Access-Control-Max-Age "3600";
    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";
    add_header Access-Control-Allow-Credentials "true";
    add_header Content-Length 0;
    add_header Content-Type text/plain;
    return 200;
  }
  add_header 'Access-Control-Allow-Origin' '$http_origin';
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
  proxy_pass http://127.0.0.1:8080;
  }
}

 

    其次,既然碰到了就想理解下為什么需要這樣,一開始腦袋還真鑽進去了。

   以下引自知乎:

  • DOM同源策略:禁止對不同源頁面DOM進行操作
  • XmlHttpRequest同源策略:禁止向不同源的地址發起HTTP請求
AJAX同源策略主要用來防止CSRF攻擊。如果沒有AJAX同源策略,攻擊過程如下:
我們發起的每一次HTTP請求都會全額發送request地址對應的cookie,那么
  1. 用戶登錄了自己的銀行頁面向用戶的cookie中添加用戶標識
  2. 用戶瀏覽了惡意頁面 。執行了頁面中的惡意AJAX請求代碼
  3. 發起AJAX HTTP請求,請求同時對應cookie也同時發送過去
  4. 銀行頁面從發送的cookie中提取用戶標識,驗證用戶標識無誤,response中返回請求數據。此時數據泄露。
  5. 由於Ajax的后台執行,此時用戶沒有意識這一過程。
     引用內容完畢。
     從上面這段文字可知,如果在不需要服務器允許的前提下就能夠進行跨域ajax請求的話,那么一個黑客網站只要你用了,那么你登錄
過的其它系統的用戶信息他都可以獲取得到。
 
     好吧,再引一段

        簡單的說,你把Cookie托付給瀏覽器保存,瀏覽器要保證你的Cookie不被惡意網站利用。

        同源策略並不能防止DDos,因為跨域的Ajax也會被請求,如果用Ajax請求,瀏覽器會先發出 

   請求,並且帶上的Cookie。拿到的響應之后(可能有敏感數據),瀏覽器才會根據Header

   里的Access-Control-Allow-Origin決定是否把結果交給里的腳本。(或者先發一個OPTIONS請求看一下CORS設

   置,再決定是否要發真正的請求。)

       因此瀏覽器只是起到了最基本的防御,在寫程序的時候還是要注意防御CSRF,比如關鍵操作不要用GET,POST請求要做額外的驗證(
   驗證碼,隨機數,Refer,Token)等等。
    引用完畢,, 不過有個疑問出現了,上面我提到OPTIONS是因為查詢協議需要的,但是從這里來看就是去看看
跨域設置而已。希望有懂的朋友幫忙確定一下。

以上知乎內容轉自:https://www.zhihu.com/question/20138568/answer/52659925

看下百度百科對同源策略的說法:
同源策略,它是由 Netscape提出的一個著名的 安全策略
現在所有支持JavaScript 的瀏覽器都會使用這個策略。
所謂同源是指,域名,協議,端口相同。
當一個瀏覽器的兩個tab頁中分別打開來 百度和谷歌的頁面
當瀏覽器的百度tab頁執行一個腳本的時候會檢查這個腳本是屬於哪個頁面的,
即檢查是否同源,只有和百度同源的腳本才會被執行。[1]  
如果非同源,那么在請求數據時,瀏覽器會在控制台中報一個異常,提示拒絕訪問。
 
同源策略的精髓很簡單:它認為自任何站點裝載的信賴內容是不安全的。當被 瀏覽器半信半疑的腳本運行在 沙箱時,
它們應該只被允許訪問來自同一站點的資源,而不是那些來自其它站點可能懷有惡意的資源。
 
就是說瀏覽器不允許你進行跨域操作,但是也開了個口子,如果某服務就是希望大家在哪都能調用我,當然一般情況下是公司內部不同項目之間調用
用到這種場景較為平常,不然你寫個誰都可以攻擊你的網站干啥呀,讓別人在腳本可以調用你的服務對你的服務器而言沒有用,產品也沒有增大曝光率,
簡直百害而無一利。
 
 順便轉轉講XSS、CSRF的博文:
http://blog.csdn.net/ghsau/article/details/17027893
http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM