首页 » SEO优化 » php获取appsercet技巧_短信验证码接口若何防刷

php获取appsercet技巧_短信验证码接口若何防刷

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

接口被狂刷会带来很高的瞬时吞吐量,很随意马虎超过1Wqps,乃至10WQPS。
这样的超高并发,会导致系统的瞬时雪崩,严重的可能会导致线上系统瘫痪。

接口狂刷的紧张戒备方法:

php获取appsercet技巧_短信验证码接口若何防刷

1.利用HTTPS

php获取appsercet技巧_短信验证码接口若何防刷
(图片来自网络侵删)

利用 HTTPS 可以保护数据传输的安全性,可以防止恶意攻击者盗取数据。
HTTPS 利用 SSL/TLS 协议对数据进行加密,可以确保数据在传输过程中不被修改或盗取。

2.交互式验证

紧张方法便是验证码验证及人机验证。
像登录这类接口我们可以添加一个验证码验证,哀求用户输入验证码,但是对付短信验证码接口,我们可以通过人机验证办法,检讨用户行为,例如:拖动滑块或识别图片中的笔墨等等

3.安全参数校验

当接口被恶意狂刷时,可以通过安全参数校验来防止这种攻击。
安全参数校验是指在接口要求中添加一些校验参数,例如韶光戳、随机字符串、署名等,来验证要求的合法性。
这样可以防止攻击者通过恶意程序进行大量的要求攻击。

详细来说,可以通过以下步骤来实现安全参数校验:

在接口要求中添加韶光戳参数,例如:timestamp=1622945123在接口要求中添加随机字符串参数,例如:nonce=abc123将所有要求参数按照参数名的字母顺序排序,例如:nonce=abc123×tamp=1622945123将排序后的参数按照“参数名=参数值”的格式拼接成一个字符串,例如:nonce=abc123×tamp=1622945123将拼接后的字符串加上一个密钥(可以是预先约定好的密钥),例如:nonce=abc123×tamp=1622945123&key=secret对加密后的字符串进行哈希打算,例如利用 MD5 算法,得到一个署名值,例如:c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1。
将署名值添加到接口要求中,例如:nonce=abc123×tamp=1622945123&signature=c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1在接口做事端对接口要求进行校验时,按照相同的算法打算署名值,并与要求中的署名值进行比对,如果同等,则解释要求合法,否则解释要求不合法

通过以上步骤,可以有效地防止接口被恶意狂刷的攻击。

理论上,哈希打算很难破解,但是如果攻击者知道了hash算法和盐,攻击者就有可能假造出带有精确校验位的署名值,从而绕过接口的限流和安全机制,因此,该方案紧张适用于须要大略戒备一些低强度攻击的场景,例如戒备垃圾要求或造孽爬虫等

下面给大家供应了一些天生和验证的PHP代码,有须要的可以直接拿去用。

天生署名数据:

<?php/ 得到随机字符串 @param integer $length 随机字符串的长度 @param string $chars 随机字符串的内容 @return string /function getRandStr($length, $chars = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'){ $randStr = ''; while ($length--) { $randStr .= $chars[rand(0, strlen($chars) - 1)]; } return $randStr;}/ 参数署名 @param array $params 所有的要求参数 @param $sercet 密钥 @return string /function getSign($params,$sercet){ if(isset($params['signature'])) unset($params['signature']); ksort($params); $string = join('',$params); $string .= $sercet; return md5($string);}$params = ['timestamp'=>time(),'nonce'=>getRandStr(10)];//前后端预定的密钥$sercet = 'sacfdfsa4e354343twg34';$params['signature'] = getSign($params,$sercet);echo json_encode($params,JSON_UNESCAPED_UNICODE);

验证署名代码:

<?php/ 参数署名 @param array $params 所有的要求参数 @param $sercet 密钥 @return string /function getSign($params,$sercet){ if(isset($params['signature'])) unset($params['signature']); ksort($params); $string = join('',$params); $string .= $sercet; return md5($string);}/ 验证署名 /function validateSignature($params,$sercet){ //判断要求参数中是否有署名字段,并且字段不能为空 if(empty($params['signature']) || empty($params['nonce']) || empty($params['timestamp'])) { throw new \Exception('无效要求',404); } //验证署名 if(getSign($params,$sercet)!=$params['signature']) { throw new \Exception('无效署名',404); } return true;}$params = $_POST;//前后端预定的密钥$sercet = 'sacfdfsa4e354343twg34';try { //验证这一步可以但对放在框架的运用验证层面 validateSignature($params,$sercet); echo '验证成功'; //验证通过后再处理其他业务逻辑}catch (Exception $e){ echo $e->getMessage();}

4. 参数加密传输

对付参数这一块,我还可以进一步优化,将参数全部加密处理,再传给做事器。
加密的办法有好几种,推举大家利用非对称加密RSA,不理解的可以看看我之前的文章【PHP数据加密的几种办法】

5.访问限流

访问限流是一种常见的保护机制,用于掌握对某个资源的访问速率,以防止过多的要求导致系统负载过高或崩溃。

限流紧张有两种,一是面向用户限流:我们可以通过nginx对用户IP登进行限流。

还有一种是面向接口限流,针对某个核心接口限定用户的要求次数。
我们可以在运用层利用Redis添加当前用户的要求限定

6.IP封禁

IP封禁是常见的网络安全方法,用于保护做事器免受恶意攻击。
IP封禁是指将某个IP地址列入黑名单,禁止其访问做事器。

在实际运用中,可以通过配置防火墙规则、利用反向代理做事器、利用专业的防火墙软件等办法来实现IP封禁和防刷,我们还可以结合nginx做一个IP封禁的脚本。

后期我们会分享一个基于nginx的IP封禁的脚本,有兴趣的可以关注"大众号哦!

7.日志监控

访问日志监控是一种常见的监控办法,用于监控网站、运用程序等的访问情形,可以帮助我们理解用户的行为和需求,以便做出相应的优化和改进。

常见的访问日志监控工具有 Apache 的 AccessLog、Nginx 的 AccessLog、ELK Stack 、PHP 要求日志监控等。
这些工具、框架帮助我们网络、剖析和可视化访问日志数据,从而更好地理解用户的需求和行为。

监控访问日志可以帮助创造未经授权的访问要求。
可以利用日志记录工具来记录每个要求的 IP 地址、韶光戳和要求参数。
如果创造非常要求,可以及时采纳方法,以防止攻击。

有遗漏或者不对的可以在我的公众号留言哦

标签:

相关文章