首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该如何规避CSS的图像URL?

我应该如何规避CSS的图像URL?
EN

Stack Overflow用户
提问于 2014-09-01 22:24:22
回答 4查看 9.4K关注 0票数 14

我有一个div,它将从用户选择的URL接收CSS背景图像,如下所示:

background-image: url("/* user specified URL here*/")

我应该如何规避URL,以便能够安全地嵌入到CSS中?逃避引号够了吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-01 23:01:17

逃避引号够了吗?

不,你也应该担心反斜杠和换行符。

以下是双引号URI的CSS语法:http://www.w3.org/TR/CSS21/grammar.html#scanner

代码语言:javascript
代码运行次数:0
运行
复制
"([^\n\r\f\\"]|\\{nl}|{escape})"

{nl}在哪里

代码语言:javascript
代码运行次数:0
运行
复制
\n|\r\n|\r|\f

{escape}是一个反斜杠转义字符。所以后面的反斜杠会破坏你的CSS。一个非转义的换行符。

我强烈建议删除所有空白,最后转义"\

票数 4
EN

Stack Overflow用户

发布于 2015-11-05 09:48:04

如果要通过JS设置背景url,那么正确和安全的方法是使用encodeURI()和用引号包装。

代码语言:javascript
代码运行次数:0
运行
复制
node.style.backgroundImage = 'url("' + encodeURI(url) + '")';
票数 16
EN

Stack Overflow用户

发布于 2017-10-07 02:51:07

因为您需要插入到CSS中的用户数据可以被看作是一个URL,而不仅仅是一个字符串,所以您只需要确保它是正确的URL编码。

这是安全的,因为格式良好的URL不包含CSS字符串中任何不安全的字符;除了撇号(')以外,只要您对CSS字符串:url("...")使用双引号,就不会出现问题。

一种简单的方法是对URL中的所有字符进行URL编码,这些字符在URL中不是“保留的”或“无保留的”。根据RFC 3986的说法,除了这些字符外,所有字符都是:

代码语言:javascript
代码运行次数:0
运行
复制
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # [ ]

这就是encodeURI()M JavaScriptārtiņšBriedis的答案中所做的。(只有一个例外:encodeURI()编码了[],这两种编码大多是无关紧要的。)

除此之外,您还可以考虑只允许以https:data:开头的URL。通过这样做,如果页面是通过HTTPS服务的,则可以防止混合内容警告,还可以避免javascript:问题亚历山大·奥马拉

您可能还需要进行其他URL解析和验证,但这不在此问题的范围之内。

如果需要将用户数据插入不能被视为URL的CSS字符串中,则需要执行CSS反斜杠转义。有关这方面的更多信息,请参见用户123444555621答案

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25613552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档