业务经理

微信扫描以上二维码

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.phpHashids.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
    • 学习学习,刚好需要

迅睿系统漏洞

独立站群系统
独立站群系统(2026-09-14)
子站独立部署时修复同步附件失败问题
在线客服
在线客服(2026-09-13)
修复删除会话报错问题 删除会话时联动删除聊天图片
在线考试竞赛系统
在线考试竞赛系统(2026-09-12)
增加投票功能 考试功能拓展 注意:更新后需要执行系统更新,更新数...
网上信箱
网上信箱(2026-09-12)
修复新版本兼容问题
GeoSeo收录宝
GeoSeo收录宝(2026-09-12)
1 优化Update.php文件,解决版本在线升级不完整问题 2 ...
GeoSeo工具箱
GeoSeo工具箱(2026-09-11)
修正历史记录推送
微信系统
微信系统(2026-09-11)
增加数据统计总览界面 账号管理增加服务和公众号的区别 菜单管理支持更...
答题系统
答题系统(2026-09-11)
一站式在线答题系统,支持真题考试、题库练习和错题本,适合培训、考证、...
阿里云滑动验证码
阿里云滑动验证码(2026-09-10)
采用阿里云验证码替换迅睿系统自带的图片验证码和滑动验证码。后台设置方...
下载Plus
下载Plus(2026-09-09)
为网站附件下载加上“计数、限次、统计、防护”四重能力:按用户组控制下...