php_base64_decode的容错
base64解码函数可以接受的字符范围是[A-Za-z0-9+/=]
,但是如果php的base64_decode遇到了不在此范围内的字符,php就会直接跳过这些字符,只把在此范围的字符连起来进行解码。
我们来做个试验:
1 | `$i` `= 0 ;``$data` `= ``"upload_progress_ZZ"``;``while``(true){`` ``$i` `+= 1;`` ``$data` `= ``base64_decode``(``$data``); `` ``var_dump(``$data``);`` ``sleep(1);`` ``if``(``$data` `== ``''``){`` ``echo` `"一共解码了:"``.``$i``,``"次\n"``;`` ``break``;`` ``}``}` |
运行结果如下:
1 | `string(12) "��hi�k�``�Y"``string(3) ``"�)"``string(0) ``""``一共解码了:3次` |
upload_progress_ZZ
一共是18个字符,但是由于base64_decode跳过了_
,所以是剩下16个字符,解码一次之后是12个字符,又因为12个字符中只有4个在范围内,所以再次解码之后变为了3个字符,这三个字符都不在范围内,所以解码之后为空字符串。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Rick!
评论