感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
陪伴着Symfony安全组件的是一些很好用的“与安全相关”的方法。这些方法被Symfony自己用到,如果你希望解决一些它们能够对付的问题,也可以使用它们。
Note
文中方法仅在PHP5.6和PHP7.0中能够使用。如果是老版本的PHP,Symfony Polyfill Component提供了一个polyfill。(译注:polyfill是指对“老旧版本浏览器”等环境提供兼容代码以便实现同样功能)。
比较两个字符串时,所耗费的时间取决于它们之间的差异。比如,当这两个字符串用作“密码比对”时,攻击者可以利用这点。这被称为Timeing attack时序攻击。
比较两个密码时,你应该使用hash_equals
函数:
1 2 3 | if (hash_equals($knownString, $userInput)) {
// ...
} |
当你需要生成一个安全的随机串时,强列推荐使用random_bytes
:
1 | $random = random_bytes(10); |
这个函数返回一个随机字符串,可用于加密,其位数就是传入的参数数字(上例中是10)。
Tip
random_byte()
函数返回一个二进制字符串,可能包含\0
字符。在一些常见场合,这可能引起麻烦,比如把这个值存到数据库中,或者作为URL的一部分。解决办法是,把random_byte()
返回的值加密或hash(你可以用base64_encode()
这个简单的PHP函数)。
如果你希望生成用加密用的安全随机整数,你应该使用random_int()
函数:
1 | $random = random_int(1, 10); |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。