2011-12-23 54 views
0

當您嘗試與LinkedIn的Apply Now按鈕集成時,您首先註冊一個API密鑰。該表單會要求您輸入Javascript Domain API,即Fully-qualified domain name of all pages that will call the JavaScript API with this key.作爲回報,它會爲您生成一個API密鑰和一些HTML代碼,您可以將n粘貼複製到您的網頁並開始使用。LinkedIn如何知道或跟蹤我嵌入其小部件的位置?

這是代碼的嚮導製作:

<script src="http://platform.linkedin.com/in.js" type="text/javascript"> 

    api_key: 7a4ghb12agvda4552da 

</script> 

<script type="IN/Apply" 

data-companyname="Asd" 
data-jobtitle="Software Developer" 
data-joblocation="Istanbul" 
data-email="[email protected]"> 

</script> 

現在,一個人如何保持跟蹤,其中該腳本被嵌入的?我首先輸入了http://example.com作爲我的Javascript Domain API。事實證明,我只能在example.com域上使用這個小部件。

in.js裏面的內容告訴LinkedIn它在哪裏嵌入?

我問的原因是我自己也在構建一個小部件,我想確保只有註冊的域可以使用我的小部件。

編輯:作爲獎勵,如果我下載in.js,刪除其中不域檢查一部分,包括我自己in.js的版本在我的網頁?他們如何預防這種情況?

A LinkedIn employee mentions that both client-side and server-side checks are done.但是會是什麼樣的檢查?我正在尋找對此問題的深入瞭解。我怎樣才能生成這樣的小部件?在客戶端,您如何檢查託管您的.js文件的當前頁面?你如何得到哪個域名託管js文件? 任何幫助表示讚賞。謝謝。

+0

你有沒有得到進一步的細節? – Robin 2012-05-15 15:37:14

回答

2

in.js有一個腳本,它將另一個腳本標記添加到DOM中。它傳遞API密鑰(可能作爲腳本URL中的GET參數),然後服務器檢查HTTP引用程序(這是一個標準HTTP標頭瀏覽器發送的,指示發送它們的網站獲取該頁面),並檢查它是否與數據庫中的API密鑰。

一個簡單的版本將包含這樣的事情:

document.write('<script src="http://mysite.com/api.js?key="' + api_key + '></' + 'script>'); 

然後在服務器上,像這樣的僞代碼:

var expectedDomain = queryTable('apikeys').equal('key', GET('key')).field('domain').run(); 
if (expectedDomain === parseDomain(http.referer)) { 
    respond(myscript); 
} 
+0

你確定這是他們做的方式嗎?如果用戶使用不發送Referer頭的瀏覽器怎麼辦?或者如果它被調整了呢? – 2011-12-23 13:00:34

+0

這是最常見的做法,儘管我沒有通過in.js瀏覽,但我敢打賭,這就是他們所做的。可能有備份方法,但99%以上的瀏覽器確實發送了引用者,並且域所有者無法爲用戶更改此設置,因此無論備份方法如何,都可以自由處理邊緣案例而不用擔心濫用。 – 2011-12-24 00:04:56

3

如果使LinkedIn JavaScript框架將無法正常工作in.js的本地副本 - 後端服務器(在。的調用中)檢查以確保in.js來自正確的服務器以及檢查以確保框架只能在指定的域。

這個問題被問/回答在這裏: https://developer.linkedin.com/forum/security-prevent-impersonations

+0

謝謝克爾斯滕,但這些檢查究竟執行得如何?他們如何使用客戶端代碼檢查和授權我的域名?他們如何執行這樣的檢查服務器端?你能分享你對這個問題的更深入的見解嗎? – 2011-12-23 20:06:46