最近看了一下Tp5的源码,看到文件缓存的时候发现了一个明显的漏洞,文件缓存路径明显是通过md5值映射的。很容易发生hash碰撞,使用场景需要斟酌,尽量不要大量使用。其实也不算是漏洞吧,毕竟用户量多的公司可能就不用文件做缓存了,这个缓存用来做一些小项目还是不错的。
示例代码如下
$a = 0xd131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70;
$b = 0xd131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70;
// var_dump(md5($a) , md5($b));exit;
$res = \Cache::set($a, ['name'=>'kimi']);
$res = \Cache::set($b, ['name'=>'Jack']);