簡體   English   中英

反向代理背后的Csrfguard

[英]Csrfguard behind a reverse proxy

我已經在我的webapp上成功安裝了CsrfGuard ,但是當在反向代理后面的preprod上測試時,事情變得糟糕了。 CsrfGuard的javascript isValidDomain不認為我的域是有效的:CsrfGuard JavaScriptServlet返回未經過代理的域...

這是javascript代碼:

if(isValidDomain(document.domain, "myRealDomain")) { … }

isValidDomain只是一個字符串比較方法,事情是:CsrfGuard JavaScriptServlet返回“myRealDomain”,javascript代碼“document.domain”返回“myProxiedDomain”:字符串比較失敗!

我不知道該做什么,我會很感激方向! 我相信有些人以前遇到過這個問題,反向代理似乎很常見。

您可以配置代理以添加標頭X-Forwarded-ByX-Forwarded-ForX-Forwarded-Proto

代理后面的服務器可以使用這些頭來重建原始請求(在代理上執行)。

這樣csrfguard servlet將使用正確的域來生成腳本。

每個代理/應用程序服務器的配置當然不同,但這里是Nginx與Tomcat結合使用的示例:

示例代理配置(Nginx):

### proxy headers ###
proxy_set_header        X-Forwarded-By          $server_addr:$server_port;
proxy_set_header        X-Forwarded-For         $remote_addr;
proxy_set_header        X-Forwarded-Proto       $scheme;

示例應用程序服務器(tomcat / RemoteIpValve ):

<Valve
    className="org.apache.catalina.valves.RemoteIpValve"
    internalProxies="trusted-ip-here"
    remoteIpHeader="x-forwarded-for"
    proxiesHeader="x-forwarded-by"
    protocolHeader="x-forwarded-proto"
   />

我們遇到與csrfguard類似的問題,發現我們的代理服務器返回了錯誤的“Referer”網址。 除此之外,我們還使用SSL來解決其他問題。 我們發現,一旦建立連接 - 它是用'domain.tld'而不是'domain.tld:443'完成的,這是csrfguard所期望的。

 Referer domain https://localhost/shop/pages/main.jsf
 does not match request domain: https://localhost:443/shop/JS/csrfguard.js

我們通過將此添加到apache httpd config來修復此問題:

Header edit Referer "(^http(s?)://([\w]+\.){1}([\w]+\.?)+)(.*)$" "$1:443$5"
RequestHeader edit Referer "(^http(s?)://([\w]+\.){1}([\w]+\.?)+)(.*)$" "$1:443$5"

由於所有請求都來自https,我們通過此修復了URI中的端口存在。 我相信您的案例可以通過相同的方式或通過將“Referer”標題設置為某個預定義的名稱來修復。 (但這可能是一個安全問題,因為所有請求都來自'正確'域名)

我有一個問題,在反向代理后面運行csrfguard-3.1和帶有SSL卸載的負載均衡器導致JavaScriptServlet返回404. csrf日志聲明

“Referer domain https:// *****與請求域http:// ****** ”不匹配

我不得不設置

org.owasp.csrfguard.JavascriptServlet.refererMatchDomain=false

讓它工作。

暫無
暫無

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

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