2011-06-07 40 views
2

這可能是一個愚蠢的問題和/或簡單的答案,或者兩者都不是。將API鎖定到特定的URL

我正在開發一個API,我想知道是否有可能將其鎖定到特定的URL /主機?

例如我的API位於一個網址上,它只響應來自特定網址的httpwebrequest。 www.apione.com只回應www.apitwo.com

這可能嗎?我一直在尋找主機頭,但不認爲有可能獲得這些信息。

感謝

回答

2

如果您的「API」作爲一個Web服務,那麼你可以使用「Request.UrlReferrer」,以獲得一個URI對象,告訴您該URL的請求來自。然後,您可以在做任何事情之前簡單地檢查它是否與一個或多個預期值匹配。這不會停止其他URL訪問該服務的請求,但您的Web服務將不會響應這些請求做任何事情。您也可以通過使用Request.UserHostAddress以類似方式通過IP進行鎖定。請注意,這些做不同的事情。如果用戶點擊www.apione.com上的鏈接,引用者將被設置爲www.apione.com,但IP將是用戶的IP。您使用哪種方法取決於API的消耗方式。例如如果有一些從www.apione.com運行的服務器端進程,那麼引用者不會有太大的幫助。引用者也很容易被欺騙。

+0

感謝您的驗證回答。我想我會沿着IP路線走下去,因爲我一直在做一些測試,這對於我需要做的事已經足夠了。 – 2011-06-07 14:39:26

0

我意識到這是一篇很舊的文章,但我認爲在未來的實現中添加一個簡單,安全的實踐來解決這個問題可能會有幫助。

在頁面上嵌入一個隨機的API訪問令牌,鏈接到會話。如果您希望防止無意中的雙重提交等,您可以選擇在每個請求中刷新令牌。

在頁面

token = get random string, 8 to N characters long, 
    hashing if you desire greater security 
store token in session 

write some html 
embed the code in a script tag: 
    var api_token = '<? echo code; ?>'; 

append api_token to all SOAP/JSONP requests 
when the request returns, replace api_token with the new token 

在服務

read api_token 
look for api_token in session 
if token does not exist, exit 
else, continue ... 
generate new token 
store token in session 
append token to response 

這一基本策略有利於保護服務請求和驗證鏈接的點擊次數。也就是說,你可以以高確定性delete.aspx?ID = 123源於manage.aspx或什麼的,而不是從別人的FB飼料,微博短網址服務,等等。