安全漏洞大揭秘:手把手教你轻松防止SQL注入
文章插图
安全漏洞大揭秘:手把手教你轻松防止SQL注入!
SQL(结构化查询语言)注入是众所周知的软件弱点和安全漏洞 , 如果不是的话 , 也是最出名的漏洞之一 。 尽管享有盛名 , 但如何防止SQL注入仍然是主要漏洞之一 , 并且攻击持续增长 。
查找SQL注入根据OWASP Top 10 , 注入漏洞(其中SQL注入是其中一种)是Web应用程序安全性的头号问题 。 SQL注入在CWE Top 25中排名第六 。 其他类型的安全漏洞示例包括:
- 指令注入(CWE-77)
- 操作系统命令注入(CWE-78)
- 冬眠注射(CWE-564)
- 表达语言注入(CWE-917)
幸运的是 , SQL注入可以通过工具静态和动态地检测到 。 但是 , 您永远无法确定是否全部抓住了它们 。 防止SQL注入也是减少这些漏洞的频率和影响的关键 。 结合了漏洞检测和预防功能的成熟DevSecOps流程很可能会捕获并阻止这些类型的漏洞进入已发布的产品 。
什么是SQL?SQL是一种特定于域的语言 , 旨在管理关系数据库 。 关系数据库将数据显示为行和列中的表的集合 。 每行都有一个提供与其他表的关系的键 。 这是表“user”的示例:
文章插图
安全漏洞大揭秘:手把手教你轻松防止SQL注入!
与CWE Top 25中常见的漏洞枚举有关的内存错误SQL是用于管理 , 查询和处理关系数据库中数据的首选语言 。 它定义数据库创建中的表和关系 。 对于大多数日常使用 , 开发人员将SQL用于“CRUD”—创建、读取、更新和删除数据 。
为什么SQL可利用?
通用编程语言不包括对SQL的支持 。 通过数据库供应商提供的API访问数据库命令 。 在许多情况下 , SQL命令以字符串形式发送 , API会解释该字符串并将其应用于数据库 。 以下是一些简单的SQL查询:
典型的SQL查询采用以下形式:
Select (something) from (somewhere) (optional condition)
以上表为例 , 从姓氏为“Smith”的行中检索电子邮件 , 使用以下SQL语句:Select email from user where lastname = ‘Smith’
输出如下:Smith1234@mail.comJohn.smith@mail.netSmith1234@mail.com
使用Web表单(见下文)从用户那里获取输入是Web应用程序中的一种常见用例 。用户在“名称”字段中输入的数据 , 例如 , 用于根据收到的输入来形成SQL查询 。考虑以下简单的Web表单:文章插图
安全漏洞大揭秘:手把手教你轻松防止SQL注入!
该软件处理表单并将值分配给变量 , 如下所示:
String formName = request.getParameter(Name);
输入为“名称”的字符串用于使用该用户输入来组合查询:String myQuery = “select message from user where email = ‘” + formName +”’;”
使用此构造的查询:Select message from user where email= ‘Smith1234@mail.com’;
其输出(以上表为例)如下:HelloHow are you
希望很容易看到这一切都会出错 。 假定直接在字符串中使用用户输入 , 那么了解SQL语法的人可以轻松地操纵它来生成SQL查询 。 考虑以下示例:使用上面相同的表格 , 有人在电子邮件字段中输入“Smith1234@mail.com”或“1” =“1” 。
相同的代码将组装以下SQL查询字符串:
- 手把手教你挑选大大大大屏的投影仪
- 手把手教你用python编程写一款自己的音乐下载器
- 手把手教你AspNetCore WebApi:Serilog
- 今天才知道,原来手机就能给视频添加字幕,手把手教会你
- 大揭秘!联想手机从昔日巅峰走到如今只剩品牌躯壳
- 「爬虫四步走」手把手教你使用Python抓取并存储网页数据
- 图解|零拷贝Zero-Copy技术大揭秘
- 深度揭秘!华强北2000块的iPhone 11竟然是组装机
- "谣言"大揭秘:新能源车自燃率高?实际起火概率远低于燃油车!
- 【权威发布】近日重点网络安全漏洞情况摘报