2013-09-01 41 views
1

如你所知,當送$阿賈克斯(..)的請求到另一個域(跨域),大多數瀏覽器拋出異常,如:訪問控制允許來源不是Chrome擴展檢查

XMLHttpRequest cannot load http://mysite.com/test.php. Origin 
http://127.0.0.1:8888 is not allowed by Access-Control-Allow-Origin. 

我正在創建Chrome擴展,它應該向我的網站發送請求。首先,我也希望看到上面的消息。但當我看到它工作正常時,我感到困惑。

首先,它似乎不錯,它的工作,我有我想要的東西。但它可能是可怕的。每個人都可以使用這種方式(只有一個簡單的腳本)攻擊我的網站並獲取其數據。

當然,抓住可能是發生在其他方面也是如此。 我是api編程和chrome擴展的新手。有人可能會告訴我方式嗎?

的manifest.json

{ 
    "manifest_version": 2, 
    "name": "MyTestExtension", 
    "description": "this extension is for test", 
    "version": "1.0", 
    "icons": { 
    "128": "icon.png" 
    }, 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "permissions": [ 
    "tabs" , 
    "*://*/*" 
    ], 
    "content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "js": ["jquery-1.7.2.min.js","content_script.js"], 
     "run_at": "document_end" 
    } 
    ] 
} 

content_script.js

$(document).ready(function(){ 
    $('html').mouseup(function() { 
     var selectedText = getSelectedText(); 
     if(selectedText > ''){ 
      my_syncTest(selectedText)  // here : selected test send to my site 
     } 
    }); 

    function getSelectedText() { 
     if (window.getSelection) { 
      var selection = window.getSelection().toString(); 
      if(selection.trim() > ''){ 
       return selection; 
      } 
     } else if (document.selection) { 
      var selection = document.selection.createRange().text; 
      if(selection.trim() > ''){ 
       return selection; 
      } 
     } 
     return ''; 
    } }); 


function my_syncTest(word){ 
var qs = 'word='+word+'&header=555&simwords=1'; 
$.ajax(
    { 
    type: "POST", 
    url: 'http://mysite.com/test.php', 
    dataType: 'json', 
    data : qs, 

    success:function(res){ 
    console.log(res.success +" - "+ res.idWord + " - " + res.header +" - " + res.meaning); 
    }}); 
} 
+0

跨域安全是不是阻止惡意軟件將請求發送到您的網站 - 這是旨在阻止一個網頁僞裝成_user_訪問其他網頁。 – Eric

回答

7

從您的推廣工作XMLHttpRequest的,因爲你定義在清單這些權限:

"permissions": [ 
    "*://*/*" 
] 

當用戶安裝擴展,他被告知,這個擴展可以訪問他在所有網站上的數據。我更喜歡只包含您需要的確切網站而不是通配符。

http://developer.chrome.com/extensions/xhr.html

這種機制是爲了保護用戶,而不是保護您的網站。如果你不希望每個人都用自己的API,使用API​​密鑰,或可考慮的OAuth:

http://en.wikipedia.org/wiki/OAuth

如果您想了解更多有關跨起源請求:

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

+0

hi swonkie 我將「*:// */*」更改爲otherurl,例如「http://google.com/」。但我可以訪問我的網站,但! – irmorteza

+0

您是否使用完整的URL,包括http://或https://? 當您進入擴展頁面chrome:// extensions /時,您可以單擊擴展下的權限以查看它實際使用的內容。 – Swonkie

+0

是的,我使用了完整的url:'「permissions」:[「htt p://google.com/*」,\t「tabs」]'。 和chrome:// extensions /中的權限爲:「1:訪問所有網站上的數據。2:訪問您的標籤和瀏覽活動」。 和我用「加載nnpacked擴展...」。 – irmorteza

相關問題