Tag: owasp

什么是“X-Content-Type-Options = nosniff”?

我正在使用OWASP ZAP对本地主机进行一些渗透testing,并持续报告此消息: 反MIME嗅探头X-Content-Type-Options未设置为“nosniff” 此检查特定于Internet Explorer 8和Google Chrome。 如果Content-Type标题未知,请确保每个页面都设置Content-Type标题和X-CONTENT-TYPE-OPTIONS 我不知道这是什么意思,我什么都找不到。 我曾尝试添加: <meta content="text/html; charset=UTF-8; X-Content-Type-Options=nosniff" http-equiv="Content-Type" /> 但我仍然得到警觉。 什么是设置参数的正确方法?

PHP中的CSRF(跨站请求伪造)攻击实例和预防

我有一个网站,人们可以像这样投票: http://mysite.com/vote/25 这将对项目25进行投票。我只想让注册用户可以使用,只有当他们想这样做。 现在我知道有人在网站上忙碌,有人给他们这样的链接: http://mysite.com/vote/30 那么他的投票就会放在这个项目上,而他却不想这样做。 我已经阅读了OWASP网站上的解释 ,但是我不太了解它 这是CSRF的一个例子,我怎样才能防止这个。 我能想到的最好的事情就是像链接一样添加链接。 但是,如果把所有的环节都放在一边,这将是相当令人恼火的。 有没有其他的方式做到这一点。 另一件事可能有人可能会给我一些其他的例子,因为该网站似乎相当神职我。

本地存储能否被认为是安全的?

我需要开发一个能长时间离线运行的Web应用程序。 为了实现这一点,我无法避免在本地存储中保存敏感数据(个人数据,而不是只存储散列的数据)。 我接受这不是build议的做法,但给了我很less的select,我正在做以下事项以确保数据: 使用斯坦福的JavaScriptencryption库和AES-256encryption本地存储的所有内容 用户密码是encryption密钥,不存储在设备上 通过ssl从单个受信任的服务器提供所有内容(当在线时) 使用owasp antisamy项目validation服务器上本地存储的所有数据 在appcache的networking部分中,不使用*,而是仅列出与受信任的服务器连接所需的URI 一般都试图应用OWASP XSS备忘单中提出的指导原则 我明白,魔鬼往往是在细节,并知道有很多关于本地存储和基于JavaScript的安全性的一般怀疑。 任何人都可以评论是否有: 上述方法的根本缺陷? 任何可能的解决scheme,这样的缺陷? 当html5应用程序必须长时间离线工作时,有什么更好的方法来保护本地存储? 感谢您的帮助。

为什么将CSRF预防标记放在Cookie中很常见?

我试图用CSRF理解整个问题并采取适当的方式来预防它。 (资源我已经阅读,理解,并同意: OWASP CSRF预防CHGat表 , 有关CSRF的问题 。) 据我所知,围绕CSRF的漏洞是通过假设(从web服务器的angular度来看)传入的HTTP请求中的有效会话cookie反映了经过身份validation的用户的愿望而引入的。 但是,所有来源域的cookie都被魔术般的附加到了浏览器的请求中,所以真正的所有服务器都可以通过在请求中存在有效的会话cookie来推断出请求来自具有经过validation的会话的浏览器; 它不能进一步假设在浏览器中运行的代码 ,或者它是否真的反映了用户的意愿。 防止这种情况的方法是在请求中包含额外的身份validation信息(“CSRF令牌”),通过除浏览器自动cookie处理以外的其他方式进行。 松散地说,会话cookieauthentication用户/浏览器,并且CSRF令牌authentication在浏览器中运行的代码。 因此,简而言之,如果您使用会话Cookie对Web应用程序的用户进行身份validation,则还应该为每个响应添加一个CSRF令牌,并在每个(变异)请求中要求匹配的CSRF令牌。 然后,CSRF令牌从服务器到浏览器返回到服务器,向服务器certificate发出请求的页面已被该服务器(由该服务器生成)批准。 关于我的问题,这是关于在该往返中用于该CSRF令牌的具体传输方法。 看起来很常见(例如,在AngularJS , Django , Rails中 )将CSRF令牌从服务器发送到客户端作为cookie(即在Set-Cookie头部中),然后在客户端中使用Javascript将其从Cookie中除去并附加作为单独的XSRF-TOKEN标题发送回服务器。 (另一种方法是Express推荐的方法,其中由服务器生成的CSRF令牌通过服务器端模板扩展包含在响应主体中,直接附加到将提供给服务器的代码/标记,例如作为一个隐藏的表单input,这个例子是一个更为web 1.0的处事方式,但是会把它推广到一个更重的JS客户端。 为什么使用Set-Cookie作为CSRF令牌的下游传输很常见/为什么这是一个好主意? 我想所有这些框架的作者仔细考虑了他们的select,并没有得到这个错误。 但乍一看,使用cookie来解决cookies本质上是一个devise限制似乎愚蠢。 事实上,如果您使用cookie作为往返传输(服务器的Set-Cookie:header下游告知浏览器CSRF令牌,而浏览器将Cookie:header上传到服务器),则您将重新引入此漏洞正在尝试修复。 我意识到上面的框架不使用cookie来实现CSRF令牌的整个往返过程; 他们使用下游的Set-Cookie,然后是上游的其他东西(例如X-CSRF-Token标头),这确实closures了漏洞。 但是即使使用Set-Cookie作为下游传输也是有误导性和危险的。 浏览器现在将CSRF令牌附加到每个请求,包括真正的恶意XSRF请求; 充其量只能使得请求比需要的更大,而最坏的情况是一些好的但错误的服务器代码实际上可能会尝试使用它,这将是非常糟糕的。 而且,由于CSRF令牌的实际目标收件人是客户端JavaScript,这意味着此cookie不能用http-only保护。 因此,在Set-Cookie头文件中向下游发送CSRF令牌对我来说似乎并不理想。

PHP $ _SERVER 与$ _SERVER ,我正确理解手册页?

我做了很多search,并阅读了PHP $ _SERVER文档。 我是否有权利使用我的PHP脚本来处理整个网站中的简单链接定义? $_SERVER['SERVER_NAME']是基于你的web服务器configuration文件(在我的情况下为Apache2),根据几个指令而有所不同:(1)VirtualHost,(2)ServerName,(3)UseCanonicalName等 $_SERVER['HTTP_HOST']基于来自客户端的请求。 因此,在我看来,为了使我的脚本尽可能兼容,使用正确的是$_SERVER['HTTP_HOST'] 。 这个假设是否正确? 后续评论: 我想我读了这篇文章后有点偏执,注意到有些人说“他们不会相信任何$_SERVER变数”: PHP $_SERVER variables are not safe for use in forms, links http://php.net/manual/en/reserved.variables.server.php#89567 (评论:Vladimir Kornea 14-Mar-2009 01:06) 显然讨论主要是关于$_SERVER['PHP_SELF']以及为什么你不应该在form action属性中使用它而没有正确的转义来防止XSS攻击。 我对上面的原始问题的结论是,对于站点上的所有链接使用$_SERVER['HTTP_HOST']而不必担心XSS攻击是“安全的”,即使在表单中使用。 如果我错了,请纠正我。