当前位置: 首页 > news >正文

关于搜索接口被攻击,如何优化思路

今天突然发现数据库崩了,最后定位到一条慢查询sql,然后追踪是客户端的搜索接口。这个接口应该是没有限制或者鉴权校验,被攻击者恶意攻击了。

select * from `publish_contents` where `status` = '1' and `column_id` in ('17', '1', '2', '19', '20', '21', '57', '89', '93', '116', '135', '139', '685', '700', '6', '7', '8', '9', '10', '11', '12', '13', '14', '29', '30', '31', '899', '903', '904', '905', '906', '907', '989', '34', '35', '36', '37', '732', '733', '38', '722', '723', '724', '725', '726', '727', '752', '973', '1248', '1249', '1266', '39', '729', '730', '43', '44', '45', '82', '83', '84', '85', '900', '901', '46', '47', '48', '49', '50', '51', '87', '88', '52', '53', '18', '32', '59', '60', '61', '63', '65', '66', '67', '68', '69', '72', '73', '74', '75', '76', '77', '708', '711', '721', '997', '1217', '1235', '33', '55', '98', '101', '677', '678', '679', '680', '712', '734', '735', '737', '743', '744', '745', '746', '750', '753', '1040', '1121', '1258', '1259', '1260', '1264', '90', '91', '682', '683', '94', '95', '117', '118', '119', '120', '121', '713', '872', '136', '137', '140', '686', '687', '688', '689', '690', '219', '220', '221', '229', '230', '231', '232', '233', '235', '250', '263', '266', '267', '268', '271', '272', '280', '283', '294', '496', '539', '581', '582', '588', '590', '593', '594', '595', '599', '600', '601', '602', '607', '660', '693', '694', '695', '696', '697', '698', '699', '709', '890', '891', '892', '893', '894', '895', '710', '715', '731', '736', '738', '739', '740', '741') and (`title` like '%file:///c:/windows/win.ini%') order by `is_top` desc, `weight` desc, `order_id` desc limit 12 offset 204

大家能看出来这个sql的问题吗?

大量in查询条件以及sql注入,导致慢查询。

个人觉得以下几点优化:

  1. 限制查询的ID数量:在接口中设置最大允许查询的ID数量,超过限制的请求将被拒绝。可以通过在接口中设置一个合理的默认值,并在文档中明确说明该限制。

  2. 接口鉴权:为接口添加鉴权机制,只允许授权用户调用接口。用户需要提供有效的访问令牌或者身份验证信息才能进行查询操作。这样可以控制用户的调用频率和权限

  3. 防止SQL注入:对用户传入的ID参数进行严格的校验和过滤,避免恶意用户利用SQL注入攻击进行非法查询。可以使用参数化查询或者ORM框架来防止SQL注入。

  4. 监控和报警:设置监控系统来监控接口的请求频率和响应时间,如果发现异常情况,及时发出报警并采取相应的应对措施。

  5. 数据库优化:对于频繁进行in查询的接口,可以考虑对数据库进行索引优化或者数据分区,提高查询性能。可以在查询记录较多的字段上添加索引,或者使用分表分库等技术手段。

  6. 接口限流:根据业务需求,在接口中添加限流策略,限制每个用户的请求频率。可以使用令牌桶算法或者漏桶算法来实现接口限流,避免用户滥用接口资源。

大家还有什么宝贵的优化有建议吗?一起讨论一下吧。


http://www.mrgr.cn/news/57476.html

相关文章:

  • 学习threejs,使用THREE.PointCloudMaterial(新版本:THREE.PointsMaterial)样式化粒子
  • AUTOSAR_EXP_ARAComAPI的5章笔记(17)
  • vue,java,webSocket通讯,服务端主动给多客户端发消息
  • Rancher2.6管理k8s1.23
  • VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版
  • CTF学习——攻防世界
  • 背包九讲——混合背包问题
  • 华为OD机试真题---We Are A Team
  • paddleocr使用FastDeploy 部署工具部署 rknn 模型
  • 智能扭矩系统Torque在新能源领域的应用_SunTorque
  • threejs中的小案例
  • autMan奥特曼机器人-出现argument list too long报错的解决方法
  • 哈希——哈希的基本概念
  • 两个开源AI应用让Claude 3.5 直接操作你的电脑;构建和部署多智能体系统课程;简化PDF文档管理并提供智能聊天功能
  • 通过运行窗口呼出Windows功能的快捷命令集合
  • Swarm集群管理常用命令与详解
  • 在 Spring 框架中,@ComponentScan` 扫描的注解类型
  • Bros!使用 focus 和 blur 事件时别忽略了这一点!
  • CentOS 6 修改 yun 源
  • 【Linux】 su 和 sudo 的区别剖析
  • C#,自动驾驶技术,ASAM OpenDRIVE BS 1.8.0 规范摘要与C# .NET Parser
  • 农业自动气象监测站的工作原理
  • 深入解析MySQL数据库:从基础到进阶的全面剖析
  • 哥德巴赫猜想渐行渐远
  • 《1024:致敬程序员的数字乐章》
  • Mitre ATTCK攻击技术-权限维持-定时任务