我想在实时服务器上使用css样式切换器.我一直在询问irc,一个人说有一个很大的XSS漏洞.我不太了解XSS漏洞.我希望有人可以帮助我保护它!
我将本教程用于css切换器:http: //net.tutsplus.com/tutorials/javascript-ajax/jquery-style-switcher/
那家伙说这个漏洞就在脚本的PHP端!
任何提示将非常感谢!
此外,如果有人可以更安全的方式重新制作整个脚本,因为 - 请从net.tutsplus.com做很多人使用它会感谢你!
我在这个脚本上看到的问题是,有一个来自客户端的值,$_COOKIE['style']
并且直接在页面中输出.
在某些特定条件下,外部网站可以使用cookie值进行劫持.此外,cookie值也在style-switcher.php
没有基于GET参数的任何过滤的情况下设置.
我建议你的是限制你想要的样式的可能性.
示例:
href="css/.css"
每次将文本字符串输出到HTML时,都必须使用htmlspecialchars()
该值,否则带外字符<
,&
或者在这种情况下"
将突破上下文(属性值)并允许攻击者将任意HTML插入到页面,包括JavaScript内容.
这在HTML注入漏洞中,您应该修复它.但它还不是直接的XSS漏洞,因为它的来源$style
是$_COOKIE
.该cookie必须由您的脚本或用户自己设置; 与值$_GET
和$_POST
值不同,它不能由第三方在用户的浏览器上设置.如果您允许第三方将用户的cookie设置为任意值,则它只会成为漏洞.
但是,style-switcher.php
确切地说:
$style = $_GET['style']; setcookie("style", $style, time()+604800);
没有检查$style
是否是批准的值,并且没有检查用户自己切换样式的请求,而不是第三方站点上的任意链接:也就是说,它容易受到XSRF的攻击.假设攻击者包含链接或img src
用户访问的页面,指向:
http://www.example.com/style-switcher.php?style=">
每次用户从您的站点加载页面时,都会运行该脚本.(技术上,"
,;
和<
/ >
在这个例子中的字符必须是URL编码与%
,但我把它生在这里的可读性.)
(此外,您应该使用POST表单,因为它有副作用.)
更糟糕的是,同一个脚本包含一个直接回声注入,其中绝对是XSS易受攻击的:
if(isset($_GET['js'])) { echo $style; }
该孔允许任意内容注入.虽然通常你会期望这个脚本js
被XMLHttpRequest
(通过jQuery get()
)调用,但没有什么能阻止攻击者通过将用户链接到以下URL来调用它:
http://www.example.com/style-switcher.php?style=&js=on
作为回应,他们会在页面中回
Content-Type
显它们,如果没有明确设置标题,将默认为text/html
,导致攻击者选择在您网站的安全上下文中执行JavaScript.
header("Location: ".$_SERVER['HTTP_REFERER']);
出于其他原因,这不是一个好主意.该Referer
标题是不能保证做它的方式到你的服务器.要确保此操作正常,请将参数中的URL-return-to传递给脚本.
我可能不会为PHP方面而烦恼.我只是从JavaScript设置相关的cookie,location.reload()
或者操纵样式表DOM来更新.PHP脚本试图使切换器在没有JavaScript的情况下工作,但除非您可以通过XSRF保护来正确和安全地实现它,否则它是一种负担.
如果您包含替代样式表,那么无论如何您都将为没有JavaScript的用户提供样式表切换支持.