- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在我维护的软件中发现了一个漏洞,用户可以在其中放置 javascript:
和 data:
链接到其他人将看到的内容。
但是,有一种机制可以在 http://
之前添加任何不以 [a-z0-9]+://
开头的链接 href ,这基本上可以只添加以 javascript://
开头的恶意链接 href。或 data://
.我想知道这是一个多大的安全问题,所以我的问题是,是否有任何方法可以利用此类链接在单击它们时执行 JavaScript 代码?
我的理解是javascript://
link 只能包含 JavaScript 一行注释,因此不能执行任何代码。我想单行评论只能以换行符( \n
)结束,但我不确定是否有办法将这样的换行符带入链接 href。我尝试了不同的方法,比如 href="javascript://
,
alert('test')"href="javascript:// alert('test')"
, href="javascript://%0aalert('test')"
和一个 \0
字符,但它们似乎都没有执行任何代码。
对于 data:
URI,我想不可能组成任何以 data://
开头的有效 URI , 但也许仍然有一些浏览器可以以某种方式利用它?
最佳答案
我在这里提出了一些可能的问题,因为这是一个有趣的挑战。即使这些都不起作用,我认为您可以很容易地使它更安全,并且值得高枕无忧。无论如何,这是我想出的一些有效负载。
你说这对你不起作用,但它在 Chrome 中对我有用 ( Windows 10/69.0.3497.100
)。这是最明显的变通方法,也是我能想到的唯一可行的变通方法。也许你在尝试时打错了字?虽然 HTML 实体编码不会这样做,但简单的 URL 编码应该...如果您的源最终看起来像这样,那么它应该可以工作:
<a href="javascript://%0aalert(document.location)">xss test</a>
(jsfiddle PoC)
您说它必须“以 [a-z0-9]+://
开头,但该正则表达式不包含“开始”部分,因此这样的内容可以匹配:
javascript:alert(1);//abc://foo.bar
你可能有类似 ^[a-z0-9]:\/\/
的东西或者正在使用包装“startsWith()”或类似语言的语言。值得一提。
我认为这里的内容不多,但值得一看。这是您可能没有考虑过的攻击媒介。
view-source://data:text/html,<script>alert(1);</script>
首先,这不应该执行任何操作,因为它是 view-source
.对于两个,它应该给出一个 CORS 错误(我认为)。最后,即使它确实执行了,它也会在与您的页面不同的上下文中执行(如果这是他们的目标,他们可能会链接到恶意网站)。所以周围有点虚弱。话虽这么说,也许还有其他嵌套协议(protocol)可能会出现问题。
不完全是 XSS,但仍然是一个潜在的问题。攻击者可能能够链接到您网站上的现有页面,例如 https://example.com/account/delete
.如果他们可以控制链接的显示名称,这可能会很有说服力。即使他们不控制显示名称,您也可以创建一些非常困惑的 uri 来掩盖它的实际去向(各种编码技术)。您的网站上可能没有任何类似的 URL(干得好!),但它确实经常发生。
这可能是显而易见的,但请务必注意,用户可以链接到复制您网站(或其他网站)外观的网站。这只是允许任意超链接带来的普遍问题。如果您的用户群特别容易受到此影响,许多网站会将外部链接重定向到警告页面(这可以像一点 js 一样简单地完成,例如:onclick="return confirm('you sure you want to do that?')"
。虽然,我不知道这些东西到底有多有效 -这只是你看到的东西。
可能有一百万种我们可以喋喋不休地说出来的事情可能会或可能不会导致安全问题。最后,强制执行您想要允许的协议(protocol)的白名单可能是值得的。您是否希望人们能够包含像 mailto:
这样的链接? , ssh:
, slack:
, file:
, ETC?我会做一个以 http(s) 开头的客户端正则表达式,然后在后端使用 URI 解析器来确认该方案确实是 http(s),如果不是,则显示警告。这更像是一个用户体验方面的问题,但如果您担心大多数用户会输入类似“www.example.com”的内容,您可以给他们一个客户端警告,告诉他们它应该以 http(s) 开头(或者只是默认情况下有它)。对于奖励积分,或许可以考虑使用信誉检查 API 并在 url 旁边显示结果,拒绝任何信誉不佳的域。
关于javascript - 可以指向以 javascript ://execute any code? 开头的 URL 的链接吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52851723/
2种参数:尺寸和价格。目前,我只能单击选择/突出显示尺寸列中的一个,也只能单击选择/突出显示价格列中的一个,而不会影响另一个列中的一个。 当我点击尺寸时,会添加一个 URL 参数“#size=4”。单
在css命名约定中,有什么原因,一些object最好以前缀o-和component开头> 以 c- 开头? 我知道 o- 代表 object 而 c- 代表 component,但为什么不呢?难道我们
这就很迷惑了,一下子,下面的代码就不行了。尝试让我的 Android 很好地显示网页已经显示的内容: HttpClient httpclient = new DefaultHttpClient();
我正在将我的网站发布到我无法控制的 IIS 服务器,我想从代码隐藏中了解它的 URL 是否以“http”或“https”开头。 首先,我在本地尝试了这两种解决方案,都返回了正确的值(“http”):
如果我运行: sbin/start-dfs.sh 然后它实际上并没有启动一个名称节点尽管打印: Starting namenodes on [0.0.0.0] 0.0.0.0: starting na
我正在开发一个包含一些数组的模块。现在我的数组包含: $omearray = array ( '#title' = 'title', 0 = array ( 'another array',
对于 PMD,我希望有一个规则来警告我那些以 my 开头的丑陋变量。 这意味着我必须接受所有不以my开头的变量。 所以,我需要一个正则表达式(re),其行为如下: re.match('myVar')
出于某种奇怪的原因,当我尝试使用 URLConnection 获取网页源时,我在输出中得到“null”。有人可以解释一下吗? 我的方法: public String getPageSource()
如何批量检查某个字符串(记录文本文件中的行)是否以特定单词开头? 我知道如何检查句子/行(字符串)中是否存在单词(子字符串),但我如何检查天气是否以这个词开头? 谢谢:) 最佳答案 这可以通过 FIN
我有一个列表,其中包含多个网址和一些字符串,例如#skipsideNav、#content。我正在从这些字符串中分离出 url if link.startswith('/'): local_u
我有以下 html 标记: 我想选择类 bubble bubble_white 和 bubble bubble_black。我正在考虑下面的代码,但它不起作用: $(".bubbl
我有一个用于文件名验证的正则表达式。在这里: /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_; ]+$/ 如何更改它以检查文件名不是以
我正在构建一个自动填充函数,它接受一个字符串输入并返回一个字符串建议列表。 Sequelize 的 iLike:query返回出现查询字符串的每个字符串。我想支持查询是前缀的字符串。例如当query=
我首先知道这可能是有史以来看起来最糟糕的正则表达式,但这里是。 我有这个正则表达式 (?:http://)?(?:www.)?youtu(?:be)?.(?:[a-z]){2,3}(?:[a-z/?=
尝试读取文件并根据行创建字典,跳过以#符号开头的行 文件示例: param1=val1 # here is comment 我的功能: def readFromFile(name): conf
我的程序正在读取文本文件并根据文本执行操作。但是文本的第一行是有问题的。显然它以“”开头。这弄乱了我的 startsWith() 检查。 为了理解这个问题,我使用了这段代码: System.ou
我的印象是变量名只能以字母和 _ 开头,但是在测试时,我还发现变量名可以以 $ 开头,如下所示: 代码 #include int main() { int myvar=13; int
我试过这个... Dim myMatches As String() = System.Text.RegularExpressions.Regex.Split(postRow.Item("Post")
开头
我正在使用CKEditor,默认情况下在内容的开头添加了。 即使将enterMode设置为,它也只会影响Enter键的作用,并保留开始的。 我遇到的问题是,如果文本以标记开头,它将围绕它包装,并且图像
我有一个List ,其中有五个字符串: abc def ghi jkl mno 我还有另一个字符串“pq”,我需要知道列表中的每个字符串是否都不以“pq”开头-我将如何使用LINQ(.NET 4.0)
我是一名优秀的程序员,十分优秀!