如何识别出 URL 中的某一个部分是一段随机字符串呢?

2019-09-04 18:47:57 +08:00
 sipangzi

比如说有这样一个 URL

/api/v1/user/NRbFH9wuGFGXjRMxy

可以理解成 NRbFH9wuGFGXjRMxy 是一个用户的 ID 了吧,怎么才能识别出 URL 中这类复杂 ID 或者是 Token 的部分呢

md5 uuid 做正则匹配,很单一算是方式之一,但是不够,会漏很多

用类似 nostril 这种库判断是不是随机字符串,但是判断效果也不是很好,而且训练好之后,如果不重新增加样本数据,就可能导致一类随机字符串上边说的 id 或者 token 是识别不出来的

想了 api,user 这种在大量 url 中出现次数肯定很高,NRbFH9wuGFGXjRMxy 出现次数肯定很低,然后利用这个做区分,但是拿到流量之后看了下,有不少接口字段出现的也是很低的很难和这类 ID 变量区分开

有什么好办法或者思路可以解决这个问题么

2587 次点击
所在节点    程序员
12 条回复
ysc3839
2019-09-04 18:52:30 +08:00
先做分词,比如你给的例子可以分成 api, v1, user, NRbFH9wuGFGXjRMxy,然后建立一个“不是随机字符串”的表,比如表里面有 api, v1, user,把这些去掉,剩下的就是“随机字符串”了。
to
2019-09-04 18:53:04 +08:00
你可能想复杂了。其实只要判断一个字符串不是自然文本就行。dump 个词典库,写个 rule based 的代码就行。
chairuosen
2019-09-04 18:57:14 +08:00
Google 去搜,搜不到就是随机字符串。手动 doge
sipangzi
2019-09-04 18:57:39 +08:00
@ysc3839 做了分词,统计了 15 万条 url 的结果,前 600 个字段里没有随机字符串,随机的分布在 600-末尾 2000 之间,api 这种确实出现次数很多,但 refundModify 或者 reqRepayState 类似这种,出现次数和 NRbFH9wuGFGXjRMxy 的出现次数都是 1 和 2 左右,并且 1 和 2 的词特别多,很难自动建立这么一个表,辅助 nostril 后确实能识别出 refundModify 这种的不是随机字符串,但是也不是很理想,没想到更好的解决办法
momocraft
2019-09-04 18:58:11 +08:00
不要指望一个正则搞定,不要指望 100%置信度搞定

多加些特征,比如在字典中出现 0 次加一分,匹配 /[:alpha:][:digit:]/ 2 次加一分
hst001
2019-09-04 19:00:37 +08:00
突然想到个小概率问题,如果生成的随机串刚好是个单词,请问是随机的还是不随机的
sipangzi
2019-09-04 19:02:46 +08:00
@to nostril 是检查是不是自然文本的库,单纯依赖这种可能导致样本或者词典少导致有些没有匹配到,然后数据量很大,人不会一直去看有没有漏下的,匹配出现问题的,可能就会一直有问题,所以想能不能有什么方式根据字段出现的频率或者很多 url 相似度做一些工作,让程序动态的做些调整,但是没有想出个好思路
sipangzi
2019-09-04 19:04:47 +08:00
@momocraft 嗯,就是想能不能根据字段出现的频率或者很多 url 相似度,发现实际测试的数据不是很理想,不知道怎么把各种方式判断的结果结合起来了
ysc3839
2019-09-04 19:39:41 +08:00
@sipangzi 没什么好办法的,人工判断基本上也是类似的规则,只不过人脑中已经有了庞大的词汇库。对于 refundModify 可以额外加一些规则,比如不是连续大写字母。
sutra
2019-09-04 20:07:44 +08:00
“ refundModify ”,在分词时,是不是分成“ refund ”和“ Modify ”就解决了?
momocraft
2019-09-04 20:18:10 +08:00
最簡單是加起來看看效果怎樣

如果你很閒可以訓練一個模型...
aguesuka
2019-09-05 00:39:33 +08:00
正常单词元音出现的几率远远高于期望值。先解码成 path /path key value 的形式,让后对每个单词判断元音几率,短单词可以自己建个库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597977

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX