Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 让用户添加自己的样式表是个坏主意吗?_Php_Security_Stylesheet - Fatal编程技术网

Php 让用户添加自己的样式表是个坏主意吗?

Php 让用户添加自己的样式表是个坏主意吗?,php,security,stylesheet,Php,Security,Stylesheet,我是新来php的,我试图弄明白这是一个坏主意还是一个安全风险 我向用户提供了一个数据表,它有一个加载的默认样式表,但是如果用户想要包含他们自己的样式表,我制作了它,这样他们就可以直接指向他们的样式表: http://www.mysite.com/info.php?css=http://www.someothersite.com/mystylesheet.css 我曾尝试在css文件中添加结束样式标记和javascript,但DOM似乎只是将其作为css加载,而无法处理 我从未见过任何其他网站允

我是新来php的,我试图弄明白这是一个坏主意还是一个安全风险

我向用户提供了一个数据表,它有一个加载的默认样式表,但是如果用户想要包含他们自己的样式表,我制作了它,这样他们就可以直接指向他们的样式表:

http://www.mysite.com/info.php?css=http://www.someothersite.com/mystylesheet.css
我曾尝试在css文件中添加结束样式标记和javascript,但DOM似乎只是将其作为css加载,而无法处理

我从未见过任何其他网站允许这种添加样式表的方法,所以,这是个好主意还是个坏主意?我想我可以让脚本加载文件并查找javascript中使用的关键字,但通过测试,我不确定是否需要这样做


更新:我正在添加CSS,如下所示:

<link href="<?php echo (isset($_GET['css'])) ? $_GET['css'] : 'default.css'; ?>" rel="stylesheet" type="text/css" />

只要样式表用于他们自己的帐户,而不是其他人的帐户,我就让他们这样做。但是,因为它可以用来会话劫持某人(如果他们没有注销),所以我需要用户的密码来更改样式表。我还将强制将其存储在本地

如果没有密码,劫机者需要做的就是:

#selector:before {
  content: expression(getCookie('phpsessid'));
}
显然,如果您没有一个名为getCookie的函数,那么他们需要做更多的腿部工作,但是获取cookie数据对他们来说仍然太容易了。这就是为什么自定义样式表的密码保护至关重要的原因


如果您没有为每个用户包含一个字段,并且使用
$\u GET['css']
路由,那么请记住,将用户从外部站点(比如MySpace)重定向到他们的页面,并通过一个到有害css文件的路由进行劫持攻击是很简单的。如果没有身份验证来保护CSS文件的更改(即使在登录时也应该有密码保护),那么您的软件确实非常容易受到攻击。

这取决于它的使用方式。如果一个用户可以使用其他人的样式表查看您的站点,那么您就是在为自己设置滥用。

看来XSS和可能的点击劫持可以通过CSS完成。您当然应该小心CSS URL不能被CSRF攻击设置

如果您的服务器请求加载原始CSS文件,那么您不想担心传出(或者可能是本地)连接。如果客户端正在这样做,那么您可能需要担心URL中的信息泄漏(幸运的是,通过URL重写的会话不再流行)。

是的

这是个坏主意

其他人所说的是完全正确的,但还有一点非常重要,即如果除了更新css的用户之外,任何人都可以查看他们的css,那么该用户可以在用户查看其页面的上下文中执行他们想要的任何javascript。最糟糕的情况是,用户使用恶意xss更新自己的页面,您查看他们的页面(以管理员身份登录),用户窃取您的密码并以您的身份登录并接管站点

根据您的站点中存储的跨站点脚本中存在的其他安全问题,例如这可能会导致像myspace samy蠕虫这样的xss蠕虫


这里有一个关于基于css的xss的一些变体的不错的链接,

对不起,就像我说的,我对php相当陌生。这有什么样的风险?对于发出请求的服务器,是否可能中断信息和/或擦除我的服务器?在这种情况下,CSS URL可能指向内部web服务器、本地文件、设备等。不,用户自己在iframe中使用此信息,因此,我不认为有这样的风险。请记住,Firefox用户和Opera用户已经拥有内置的浏览器支持来创建特定于站点的样式表。您添加CSS的方法会导致巨大的安全漏洞:假设$\u GET['CSS']是“>#这里是将cookie发送到另一台服务器的代码。当然,只有当您的站点使用cookies时,这才是一个问题)我根本没有在我的站点上使用cookies,但是添加样式表的更好方法是什么?您没有看到我使用的htmlspecialchars()?它不允许使用标签…@fudgey,你想只允许url,对吗?我建议检查一下$_GET['css']是否是一个URL,也许是preg_matchI没有文件空间在本地存储所有css(这是一个免费的托管服务)。所以,如果我加载文件并搜索say“expression”并在找到它时中止加载,我应该可以了?谢谢跳蚤。。。我忘了邪恶和表情标签。我不确定。我相信有一种方法可以在
expression()
调用之外使用Javascript,比如日期对象,但我最近没有看到一个例子。我去看看能找到什么。你有数据库访问权限吗?@snicker,没问题。我讨厌IE强迫其他人支持它。不,这个网站很基本,没有使用数据库。但是我在网站上以XML或HTML文件的形式缓存数据(但只有10分钟)。哇,这很可怕,但我认为我没问题,因为带有自定义CSS的页面只显示在用户网站的iframe中。如果我真的打算查看他们的页面,我就不会以管理员身份登录(反正这是另一个网站),我只通过FTP访问我的网站。这听起来更好!只要被称为“用户自己的网站”,这意味着一个页面只有用户自己可以看到,没有人可以看到。因为另一个攻击向量可以是用户创建自己的站点,添加一些邪恶的CSS,然后将该链接的链接发送到站点上的其他用户,任何登录的用户都将得到cookie信息。我不完全理解网站的结构,所以上面的场景可能不适用。@fudgey:你也不应该自己呈现他们的CSS,不管你是以谁的身份登录的。即使是出于调试目的,也不会,不管它多么诱人。好吧,除非你是通过某种安全实验室的设置登录的,但在这种情况下,你已经知道的比我多了。:)