Javascript CGI回应POST数据-安全问题?

Javascript CGI回应POST数据-安全问题?,javascript,security,cgi,Javascript,Security,Cgi,我想使用JavaScript在网站上生成一个文件,并提供给用户下载。我了解到,使用普通JavaScript和HTML5是不可能做到这一点的 我正在考虑将生成的文件内容发布到我的服务器上的CGI函数中,该函数只回显数据。通过设置正确的标题,我可以通过这种方式提供下载数据 我想知道这样一个echo CGI函数是否会被误用并导致安全问题。网站(也是CGI功能)使用基本身份验证进行密码保护 有什么意见吗?如果它只是回显来自客户端的数据,我看不到任何安全问题。客户已经知道该数据。您只是在更改标题,以便浏览

我想使用JavaScript在网站上生成一个文件,并提供给用户下载。我了解到,使用普通JavaScript和HTML5是不可能做到这一点的

我正在考虑将生成的文件内容发布到我的服务器上的CGI函数中,该函数只回显数据。通过设置正确的标题,我可以通过这种方式提供下载数据

我想知道这样一个echo CGI函数是否会被误用并导致安全问题。网站(也是CGI功能)使用基本身份验证进行密码保护


有什么意见吗?

如果它只是回显来自客户端的数据,我看不到任何安全问题。客户已经知道该数据。您只是在更改标题,以便浏览器允许您将内容保存为文件

您不会向尚未访问的各方披露任何信息。

它是:


但是,如果您仍然希望使用CGI方法,则允许页面回显发布的数据存在安全风险。这被称为

假设您有一个CGI正在收听
https://example.com/cgi-bin/downloader

假设用户已通过基本身份验证进行身份验证,然后收到包含链接的电子邮件。用户通过电子邮件访问网站(比如
evil.com
),该电子邮件创建了一个由JavaScript提交给
https://example.com/cgi-bin/downloader
包含一个HTML文档,该文档还包含一些JavaScript,用于将Cookie从您的域发送给攻击者。即使您正在设置正确的
内容类型
头以将HTTP响应标识为XML,并向用户显示浏览器认为它是的内容类型(在本例中为HTML)。要避免这种情况,请确保在响应中设置以下标题:

X-Content-Type-Options: nosniff
因此,在响应中结合使用此标题和内容类型
text/xml
,应该可以降低XSS的风险。我还建议设置标题,以便下载而不是显示文件:

Content-Disposition: attachment; filename="bar.xml"
为了防止其他站点首先向您的CGI服务发出请求,您可以使用一种方法。推荐的方法是“同步器令牌模式”,这涉及到创建一个服务器端令牌,该令牌绑定到必须随POST请求一起提交的用户会话。对于使用基本身份验证的系统,这是否可行,由您自己决定。可以使用
Referer
标题,尽管这不太安全:

检查referer被认为是一种较弱的CSRF保护形式。例如,open redirect漏洞可用于利用受referer检查保护的基于GET的请求,某些组织或浏览器工具会删除referer标头作为数据保护的一种形式。referer检查也存在常见的实现错误。例如,如果CSRF攻击源于HTTPS域,则将省略referer。在这种情况下,当请求执行状态更改时,缺少referer应被视为攻击。还请注意,攻击者对referer的影响有限。例如,如果受害者的域是“site.com”,则攻击者会利用源自“site.com.attacker.com”的CSRF漏洞,这可能会愚弄已损坏的referer检查实现。XSS可用于绕过referer检查

简而言之,referer检查是CSRF入侵检测和预防的合理形式,尽管它不是一种完全的保护。Referer检查可以检测某些攻击,但不能阻止所有攻击。例如,如果您的HTTP Referer来自不同的域,并且您只希望收到来自您的域的请求,那么您可以安全地阻止该请求


您还应该对此进行测试以确保这一点。

这正是我所想到的邪恶的东西。我很想使用数据URL,但它们似乎非常有限。目前我想提供一个XML文件,IE似乎无法从数据URL加载它们。如果HTML文件是唯一的潜在风险,CGI函数可能不允许这种MIME类型。也许它还可以检查推荐人。啊,我误解了,我以为你的意思是生成一个JavaScript文件,而不是XML。我会更新答案。