有人可以解释一下这个 javascript 漏洞是如何工作的吗???:D 这是一个将从打开的推特窗口中获取数据(用户名)的漏洞......
alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
有人可以解释一下这个 javascript 漏洞是如何工作的吗???:D 这是一个将从打开的推特窗口中获取数据(用户名)的漏洞......
alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
这不是一个漏洞,它是一个非常非常简单的正则表达式。
如果您当前在 Twitter 上,则该 RegEx 会将您当前的地址与该部分进行比较twitter.com/<USERNAME>/<...>
并提取该username
部分。
这就是它所做的 100% 。
因此,如果我在https://twitter.com/nerdswguitars/
,RegEx 会检查我在https://twitter.com/
,然后它会查找不是另一个字符之后的每个/
字符,并收集它们。
当它完成收集它们时(即:当它/
到达或到达你所在地址的末尾时),它会吐出收集到的结果。
var twitterRegEx = /https:\/\/twitter.com\/([^\/]+)/;
var twitterURL = "https://twitter.com/nerdswguitars/";
// (...) collect whatever is in here, to return if it matches
// [ ] compare against any of the characters inside
// [a-z] = compare against all lowercase letters in the English language
// [A-Z] = compare against all uppercase letters in the English language
// [_\-\*] = compare against "_" "-" and "*"
// [^...] = NOT -- compare against all characters NOT in this set
// so [^\/] = compare against any character that's NOT "/"
// + = 1 or more
// [^\/]+ = compare against one or more characters which are NOT "/"
// ([^\/]+) = collect every character which does not match "/"
var regExArray = twitterRegEx.exec(twitterURL); // ["https://twitter.com/nerdswguitars/", "nerdswguitars"]
var userName = regExArray && regExArray[1] || ""; // avoids an error - lots of ways to do this
(exec
或者match
如果您想以其他方式执行并使用字符串)过程:
13.查看下一个字符 --> "s" !== "/" --> TRUE:收集并继续
14.查看下一个字符 --> "/" !== "/" --> FALSE :返回所有收集的信件
PS:如果你不小心,你的代码会导致严重的问题。如果 RegEx 失败(比如根本没有匹配项),它不会返回数组,而是返回null
.
如果你尝试null[1];
JS 会生你的气并抛出一个错误。