V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
InFaNg
V2EX  ›  程序员

小白写的短网址生成工具

  •  
  •   InFaNg · 2023-02-06 14:57:25 +08:00 · 2266 次点击
    这是一个创建于 658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在家无聊,花了一个月左右的时间学习了 PHP 和一些前端相关的知识,做了这个短网址生成工具,欢迎大家折腾,求 star~~

    后端使用 PHP 实现,前端使用 BootStrap+jQuery
    使用 Nginx/Apache HTTP Server 对短链接重写
    使用 PHP MySQL 预处理语句,有效防止 SQL 注入
    包含安装程序,可图形化配置数据库链接信息
    包含后台管理界面,支持短链接的修改 /删除

    项目地址: https://github.com/caoji2001/short-url
    演示链接: https://go.caoj.org

    运行截图


    14 条回复    2023-12-31 16:59:28 +08:00
    opengps
        1
    opengps  
       2023-02-06 15:05:43 +08:00
    少了最关键的:足够短的域名^^,op 可以去低价买个二手杂米.cc ,别问我是怎么知道的
    RedisMasterNode
        2
    RedisMasterNode  
       2023-02-06 15:10:26 +08:00   ❤️ 1
    $random_number = rand(14776337, 916132832); // [62^4 + 1, 62^5]
    while ($db->where('id', $random_number)->getValue('fwlink', 'count(*)') > 0) {
    $random_number = rand(14776337, 916132832); // [62^4 + 1, 62^5]
    }

    这个方案不会在短连接数量很多的时候产生一些冲突吗,这里大概有 9 亿的可用值,也就是说数据量达到 3 亿左右基本上就有 1/3 的请求会需要查 > 1 次 DB

    另外在访问的时候,相当于所有的访问都要去查询 DB ,即使链接是用户随便输入的

    无恶意纯随便探讨一下,小工具做得挺有意思的页面简洁好看。
    InFaNg
        3
    InFaNg  
    OP
       2023-02-06 15:12:26 +08:00
    @opengps okk !以后我去看看!
    InFaNg
        4
    InFaNg  
    OP
       2023-02-06 15:15:02 +08:00
    @RedisMasterNode 听起来很有道理的样子,当时写这个随机数生成想的有点随意,感觉更合理的方法应该是在数据超过一定阀值后,在更大的范围内生成随机数,之后有空这部分重写下~~
    RedisMasterNode
        5
    RedisMasterNode  
       2023-02-06 15:31:53 +08:00
    @InFaNg 有没有什么更稳定的唯一 ID 生成方案呢,或者你这里已经用了 base62 了,那有没有什么稳定的唯一十进制数生成方案呢,这里的 DB 查询完全可以避开的
    fkdog
        6
    fkdog  
       2023-02-06 15:43:48 +08:00
    好奇现在还有短网址这样的需求么。。?
    duanxianze
        7
    duanxianze  
       2023-02-06 16:03:36 +08:00
    @fkdog 有 主要是发短信太长的参数没法带
    baoei
        8
    baoei  
       2023-02-06 16:06:27 +08:00
    @fkdog 灰产需要
    AoEiuV020CN
        9
    AoEiuV020CN  
       2023-02-06 16:41:27 +08:00
    @fkdog #6 有的,我自己就建了个自己用,
    一些软件配置文件啥的通过短连接固定并缩短,必要的时候可以直接输入,
    原地址太长的只能复制粘贴,换地址了也都得修改配置,有时不方便,
    wonderfulcxm
        10
    wonderfulcxm  
       2023-02-06 16:45:18 +08:00 via iPhone
    @fkdog 有,我们公司网站就有,一是统计,二是可以改短网址对应那个长网址,长网址换了分享出去还能改。
    bearboss
        11
    bearboss  
       2023-02-07 13:49:17 +08:00
    @RedisMasterNode hash 或者随机数都可能碰撞 自增的话区间太明显 容易给别人根据规则遍历短链接 怎么才能完全避免查库呢
    RedisMasterNode
        12
    RedisMasterNode  
       2023-02-07 14:21:29 +08:00   ❤️ 2
    @bearboss 自增区间会有反解的风险但是并不能说太明显

    1. base62 算法你可以自由实现,包括如果不按照 ABC..XYZabc...xyz123..89 这个顺序,如果我将数字安插在不同字母之间作为 base62 算法的 base 呢?只要保证生成和解析是相同即可,不一定是服务外能简单猜测到的排序
    2. 除了单纯的自增,在分布式场景中你的短链生成的机器有非常多,例如 50 个机器,每个机器除了有它自己的号段以外,还需要将机器号埋入 base62 之前的明文,例如我为每台机器分配名字:33869 、22193 这些都是无规则的 ID ,可以进一步混淆 base62 前的明文

    类似的 trick 还可以举例好几种,仍然有反解的风险,但是我理解这个东西得看是否产生价值,如果反解要花很多时间的话那我觉得服务端的目的已经基本达到了
    thinkershare
        13
    thinkershare  
       2023-02-07 16:21:18 +08:00
    国内大部分短信服务商直接不支持短网址动态短信,因为无法审核,就非常的无语。
    tercel36524
        14
    tercel36524  
       329 天前
    https://www.369url.cn
    这个还是不错的一个选择,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5643 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:20 · PVG 15:20 · LAX 23:20 · JFK 02:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.