业务经理

微信扫描以上二维码

028-61286886

技术咨询

整合Hashids,用于生成加密ID,防止ID暴露被穷举采集

迅睿框架 更新 2023-11-23 17:43:11 Adai

整合Hashids,用于生成类似YouTube的Id,防爬虫。Hashids是一个小型的开放源代码库,可以将数字生成很短的、唯一的、非顺序的字符ID。 例如可以数字347转换为 “yr8” 字符串,你还可以将字符串ID进行解码恢复成数字。

WeChat631422186d09aee7177af7f116fef026


1、首先到Hashids官网下载PHP版本,开源地址:https://github.com/vinkla/hashids

2、在dayrui目录下新建目录ThirdParty

3、将下载好的Hashids上传至ThirdParty目录下

4、修改文件HashGenerator.php和Hashids.php

namespace Hashids;

修改为

namespace Phpcmf\ThirdParty\Hashids;


5、添加自定义函数。config/custom.php


function eos_hashids( $id = '' , $operation = 'DECODE' , $key = 'G2cOwnsHcjnJAayk' , $length = '16'){

    $hashids = new \Phpcmf\ThirdParty\Hashids\Hashids($key, $length);

    if( $operation == 'DECODE' ){
    
        return intval($hashids->decode( $id )[0] ? $hashids->decode( $id )[0] : '0');
    
    }else if( $operation == 'ENCODE' ){
    
        return $hashids->encode($id);
    
    }else{
    
        return;

    }
}

具体配置请看官网,只需要知道operation和key和length,一个是密钥,一个是加密长度,DECODE是解密,ENCODE是加密


这个时候可以进行测试了,在模板页面添加

{eos_hashids('100','ENCODE')}

<br>

{eos_hashids('bQ58jBGvwNEVWp63','DECODE')}

不出意外就可以得到

bQ58jBGvwNEVWp63

100

6、添加加密url的函数,config/custom.php

// 详情ID
function eos_hashids_id($data){

    return eos_hashids($data['id'],'ENCODE');

}
// 栏目ID 
function eos_hashids_catid($data){ 

    return eos_hashids($data['id'],'ENCODE'); 
    
}

7,修改URL规则

WeChat44d092bbc1fd2b1ce2a4e6ee42e88bc1

8、更新缓存,重新生成内容地址,这个时候就得到了带有加密地址的url了,这个时候访问url会出现404,因为还差最后一步解密


WeChat06c4441b76b4810613322f51eb7d4b73


9、修改模块App / Article / Controllers / 目录下的 Category.php  ,15行

(int)\Phpcmf\Service::L('Input')->get('id'),

修改为

(int)eos_hashids(\Phpcmf\Service::L('Input')->get('id'),'DECODE'),


10、修改模块App / Article / Controllers / 目录下的 Show.php  ,13行

(int)\Phpcmf\Service::L('Input')->get('id'),

修改为

(int)eos_hashids(\Phpcmf\Service::L('Input')->get('id'),'DECODE'),


到此为止,ID加密就算是完成了,返回页面刷新试试。使用此函数可以进行很多加密,具体玩法可以自行研究。


感谢回帖!


方案

  • user_falle #1 · 2023-07-19 14:11:40
    看看隐藏了啥
  • 自牧 #2 · 2023-07-19 16:13:38
    学习学习,刚好需要
  • 不停游的鱼 #3 · 2023-07-20 09:03:36
    我生成来看看
  • 自牧 #4 · 2023-07-25 00:15:19
    伪静态有点问题
  • Adai #5 · 2023-07-25 15:19:28
    自牧
    "post\/([a-zA-Z0-9-=]+)(\?.*)?$"        => 'index.php?s=article&c=show&id=$1',
    解决404
  • 自牧 #6 · 2023-07-26 22:46:24
    Adai 这个很实用,感谢分享
    "post\/([a-zA-Z0-9-=]+)(\?.*)?$"        => 'index.php?s=article&c=show&id=$1',
    可否改为共享模块的
    "post\/([a-zA-Z0-9-=]+)(\?.*)?$"        => 'index.php?c=show&id=$1',
    多模块的如何操作能不能参照官方给的// 判断url是否是来自自定义函数if (CMSURI) { $myfile = WRITEPATH.'myid/'.md5(urldecode(CMSURI)).'.txt'; if (is_file($myfile)) { $id = eos_hashids('file_get_contents($myfile)','ENCODE'); if ($id) { return [ CMSURI => 'index.php?c=show&id='.$id, // 这里写内容的地址 ]; } }}变为共享模块通用
  • SEO优化推广 #7 · 2023-08-26 10:15:01
    学习学习,刚好需要
  • 小昕 #8 · 2023-11-23 17:43:11
    • 学习学习,刚好需要

迅睿系统漏洞

AI文章生成器
AI文章生成器(2026-10-29)
任务插图设置数量
Bing站长数据
Bing站长数据(2026-10-29)
根据BING接口调整菜单 各个页面数据支持点击查看详情
泛解析站群系统
泛解析站群系统(2026-10-29)
AI队列增加清空按钮 表单提示语收敛 目录模式不接管主域名模板
域名授权系统
域名授权系统(2026-10-28)
后台增加前台访问地址链接
GeoSeo收录宝
GeoSeo收录宝(2026-10-28)
1 优化 BreadcrumbList 前端输出item细节 ...
自定义单页
自定义单页(2026-10-28)
增加批量设置url地址 URL规则和分页规则改为页面编辑界面 低...
友情链接
友情链接(2026-10-28)
用于网站友情链接的后台录入,前台提供调用代码,有网站标题、网站log...
关键词TAG
关键词TAG(2026-10-28)
[高级版]增加补录索引生成按钮 [高级版]针对建站系统高级版进行查询...
后台内容复制
后台内容复制(2026-10-28)
模块表单复制成功后返回到对应内容的表单列表中
问答插件
问答插件(2026-10-27)
问答插件基于官网「开源社区」功能分发而来,支持悬赏贴功能,微信通知。...