簡體   English   中英

保護API免受CSRF影響?

[英]Protect APIs against CSRF?

我的網站使用Ajax請求使用了一個PHP API!

我可以使用該API執行的操作的示例是(登錄用戶,更改密碼,檢索敏感數據)

簡而言之,在使用此API時如何防止CSRF? 對於我來說,如何理解似乎有點復雜!

我使用HTTPS連接執行這些操作。.但我認為這不足以確保操作安全!

您將要使用Synchronizer Token 我認為我不能比OWASP做得更好:

為了促進“透明但可見”的CSRF解決方案,鼓勵開發人員采用同步器令牌模式( http://www.corej2eepatterns.com/Design/PresoDesign.htm )。 同步器令牌模式要求生成與用戶的當前會話關聯的隨機“挑戰”令牌。 然后,將這些質詢令牌插入HTML表單和與敏感服務器端操作關聯的鏈接中。 當用戶希望調用這些敏感操作時,HTTP請求應包含此質詢令牌。 然后,服務器應用程序有責任驗證此令牌的存在和正確性。 通過在每個請求中包含質詢令牌,開發人員可以強有力地控制用戶是否確實打算提交所需的請求。 由於成功利用漏洞(假設攻擊者知道目標受害者會話隨機生成的令牌),因此在與敏感業務功能相關的HTTP請求中包含必需的安全令牌有助於緩解CSRF攻擊。 這類似於攻擊者能夠猜測目標受害者的會話標識符。 以下概要描述了將質詢令牌合並到請求中的一般方法。

當Web應用程序提出請求時(通過生成在用戶提交或單擊時引起請求的鏈接或表單),該應用程序應包括一個具有通用名稱的隱藏輸入參數,例如“ CSRFToken”。 此令牌的值必須是隨機生成的,以使攻擊者無法猜測它的值。 考慮利用Java應用程序的java.security.SecureRandom類來生成足夠長的隨機令牌。 替代的生成算法包括使用256位BASE64編碼的哈希。 選擇此生成算法的開發人員必須確保在散列以生成隨機令牌的數據中利用了隨機性和唯一性。

<form action="/transfer.do" method="post"> <input type="hidden" name="CSRFToken" value="OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZMGYwMGEwOA=="> … </form>

通常,開發人員只需為當前會話生成一次此令牌。 最初生成此令牌后,該值將存儲在會話中,並用於每個后續請求,直到會話過期。 當最終用戶發出請求時,與會話中找到的令牌相比,服務器端組件必須驗證請求中令牌的存在和有效性。 如果在請求中找不到令牌,或者提供的值與會話中的值不匹配,則應中止請求,應重置令牌,並將事件記錄為可能的CSRF攻擊進行中。

為了進一步增強此提議設計的安全性,請考慮對每個請求隨機化CSRF令牌參數名稱和/或值。 實施此方法會導致生成每個請求令牌,而不是每個會話令牌。 但是請注意,這可能會導致可用性問題。 例如,由於上一頁可能包含不再有效的令牌,因此通常會阻礙“后退”按鈕瀏覽器的功能。 與上一頁的交互將在服務器上導致CSRF誤報安全事件。 無論采用哪種方法,都鼓勵開發人員以與保護經過身份驗證的會話標識符相同的方式來保護CSRF令牌,例如使用SSLv3 / TLS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM