0

有人可以解释一下这个 javascript 漏洞是如何工作的吗???:D 这是一个将从打开的推特窗口中获取数据(用户名)的漏洞......

alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
4

1 回答 1

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如果您想以其他方式执行并使用字符串)过程:

  1. 找到“https://twitter.com/”——> TRUE:继续
  2. 查看下一个字符 --> "n" !== "/" --> TRUE: 收集并继续
  3. 查看下一个字符 --> "e" !== "/" --> TRUE: 收集并继续
  4. 查看下一个字符 --> "r" !== "/" --> TRUE: 收集并继续

13.查看下一个字符 --> "s" !== "/" --> TRUE:收集并继续
14.查看下一个字符 --> "/" !== "/" --> FALSE :返回所有收集的信件

PS:如果你不小心,你的代码会导致严重的问题。如果 RegEx 失败(比如根本没有匹配项),它不会返回数组,而是返回null.
如果你尝试null[1];JS 会生你的气并抛出一个错误。

于 2012-10-19T00:40:15.173 回答