专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

如何防止sql注入,防止sql注入的方法有哪些

来源:小易整编  作者:小易  发布时间:2023-03-24 11:56
摘要:如何防止sql注入,防止sql注入的方法有哪些什么是SQL注入?SQLi是一种基于Web的应用程序攻击,攻击者可以在网站的数据库中运行恶意查询。SQL是一种用于执行恶意SQL语句的代码注入技术。例如,如果你想登录网站,但忘记了用户名和密码,...

如何防止sql注入,防止sql注入的方法有哪些

如何防止sql注入,防止sql注入的方法有哪些

什么是 SQL 注入?

SQLi 是一种基于 Web 的应用程序攻击,攻击者可以在网站的数据库中运行恶意查询。SQL是一种用于执行恶意SQL语句的代码注入技术。

例如,如果你想登录网站,但忘记了用户名和密码,通过使用SQLi注入,我们可以在不知道密码的情况下登录或访问网页。

SQL 注入是如何工作的?

SQL 注入包含通过应用程序中来自客户端的输入数据插入或注入 SQL 查询。这些被注入到影响预定义 SQL 命令的数据平面中。

SQL 注入攻击针对动态 SQL 语句中的漏洞。将动态 SQL 语句想象成一个多元数学函数,其参数是固定的,而结果由放置在自变量中的值决定。

同样,动态 SQL 语句也由一组预定义的参数(例如 Web 表单)组成,并且只有在用户提供输入时才会生成完整的语句。

请参阅以下登录表单的 SQL 语句示例:

SELECT  *  FROM users WHERE username =  '$username'  AND password = bcrypt ('$password' )

当用户输入用户名和密码时,语句完成。然后向服务器发送查询以从数据库中检索用户信息。

如果动态 SQL 语句中存在漏洞,攻击者可以以某种形式输入复杂的脚本来破坏现有参数并更改整个语句的含义。

如何防止sql注入,防止sql注入的方法有哪些

带内 SQLi:带内 SQL 注入是一种 SQL 注入,攻击者通过相同的通信通道接收结果作为直接响应。例如,如果攻击者通过她的网络浏览器手动发起攻击,则攻击结果将显示在她的同一个网络浏览器中。带内 SQL 注入也称为传统 SQL 注入。

基于错误的 SQL 注入—— 攻击者在此执行某些操作,导致数据库生成错误消息。您可以使用错误消息来确定正在使用的数据库、处理程序正在使用的服务器版本等。

基于联合的 SQL 注入 —数据库生成的用于获取单个 HTTP 响应的语句。您可以在 URL 中构造查询或在输入字段中组合多个语句来尝试生成答案

Blind SQLi : Blind SQL injection是一种SQL注入,攻击者不会从被攻击的数据库中得到明确的响应,而是观察数据库服务器和应用程序的行为,以增量方式重建数据库结构。SQL 盲注也称为推理 SQL 注入。

基于布尔值—— 在这里,攻击者向数据库发送 SQL 查询,并要求应用程序根据查询返回 True 还是 False 返回不同的结果。

基于时间——在这种攻击中,攻击者向数据库提交 SQL 查询,并导致数据库在共享结果之前等待指定的时间量。响应时间帮助攻击者确定查询是真还是假。

Out-of-Band SQLi:带外 SQL 注入 (OOB SQLi) 是一种 SQL 注入,在这种注入中,攻击者不会通过同一通信通道收到来自被攻击应用程序的响应,但可能会被诱骗发送数据传输到由攻击者控制的远程端点。只有当您使用的服务器具有触发 DNS 或 HTTP 请求的命令时,带外 SQL 注入才有可能。但是,这适用于所有流行的 SQL 服务器。

SQLi 示例

如何防止sql注入,防止sql注入的方法有哪些

第一个例子非常简单。它展示了攻击者如何使用 SQL 注入漏洞绕过应用程序安全并以管理员身份进行身份验证。

以下脚本是在 Web 服务器上执行的伪代码。这是一个使用用户名和密码进行身份验证的简单示例。示例数据库有一个以users下列命名的表:username和password。

# Define POST variablesuname = request.POST['username']passwd = request.POST['password']# SQL query vulnerable to SQLisql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”# Execute the SQL statementdatabase.execute(sql)

这些输入字段容易受到 SQL 注入攻击。攻击者可以在输入中使用 SQL 命令,从而改变数据库服务器执行的 SQL 语句。例如,他们可以使用涉及单引号的技巧并将passwd字段设置为:

password' OR 1=1

结果,数据库服务器运行以下 SQL 查询:

SELECT id FROM users WHERE username = 'username'  AND password = 'password'  OR  1 = 1 '

由于该OR 1=1语句,无论和是什么,该WHERE子句都返回表中的第id一个。数据库中的第一个用户通常是管理员。这样,攻击者不仅可以绕过身份验证,还可以获得管理员权限。他们还可以注释掉 SQL 语句的其余部分,以进一步控制 SQL 查询的执行

-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite' OR '1'='1' --' OR '1'='1' /*-- MySQL' OR '1'='1' #-- Access (using null characters)' OR '1'='1' ' OR '1'='1'

如何防止 SQL 注入?

可以应用以下策略来防止 SQL 注入攻击。

  1. 永远不要相信用户输入。在动态 SQL 语句中使用它们之前,应始终对它们进行清理。存储过程——允许您封装 SQL 语句并将所有输入视为参数。

  2. Prepared Statements——准备好的语句,首先构建 SQL 语句,然后将提交的用户数据作为参数处理。这不会影响 SQL 语句的语法。正则表达式 — 可用于检测潜在的恶意代码并在执行 SQL 语句之前将其删除。

  3. 数据库连接用户权限——用于连接数据库的帐户应该只被授予必要的权限。这有助于降低服务器上 SQL 语句的性能。

  4. 错误消息——这些消息不会泄露敏感信息或错误的确切位置。“抱歉,出现技术错误。我已经联系了技术团队。稍后再试”,而不是显示导致错误的 SQL 语句。

防止 SQL 注入攻击的唯一方法是设置输入验证。这意味着应该监视和清理用户输入,以过滤掉潜在的恶意代码。

这正是 Web 应用程序防火墙 (WAF) 所做的。分析对Web 应用程序的所有用户输入,以查找与可疑代码的匹配项。


本文地址:百科问答频道 https://www.neebe.cn/wenda/938447.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • SQL创建视图,查看视图

    SQL创建视图,查看视图

    视图为数据的表示提供了更为便捷的方式,选择性的对数据进行显示,更方便了对数据的管理创建视图01首先打开对象资源管理器展开数据库节点右击视图02选择新建视图...

  • SQLAlchemy是什么

    SQLAlchemy是什么

    SQLAlchemy是Python编程语言下的一款开源软件。提供SQL工具包及对象关系映射工具,使用MIT许可证发行。采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。SQLAlchemy是Pyt...

  • alisql配置安装,alisql安装教程

    alisql配置安装,alisql安装教程

    alisql配置安装,alisql安装教程AliSQL编译安装#查看是否存在MySQL软件包rpm-qa|grepmysql#安装依赖包yum-yinstallgccgcc-c++ncurses-develperlcmakebisonunz...

  • 外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程学习目标掌握外键约束的添加方法知道外键约束字段的添加及删除规则1.多表查询概述l实际开发中,一个项目通常需要很多张表才能完成。l例如:一个商城项目就需要分类表(category)、商品表(product...

  • 如何防止sql注入,防止sql注入的方法有哪些

    如何防止sql注入,防止sql注入的方法有哪些

    如何防止sql注入,防止sql注入的方法有哪些什么是SQL注入?SQLi是一种基于Web的应用程序攻击,攻击者可以在网站的数据库中运行恶意查询。SQL是一种用于执行恶意SQL语句的代码注入技术。例如,如果你想登录网站,但忘记了用户名和密码,...

  • 数据库设计规范,mysql数据库设计规范

    数据库设计规范,mysql数据库设计规范

    数据库设计规范,mysql数据库设计规范规范背景与目的MySQL数据库与Oracle、SQLServer等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等...

  • 数据库索引怎么用,MySQL数据库索引用法详细介绍

    数据库索引怎么用,MySQL数据库索引用法详细介绍

    数据库索引怎么用,MySQL数据库索引用法详细介绍关于MySQL索引,对于研发同学,尤其是后端研发同学,一定不会陌生。我们工作中经常会用到MySQL数据库,就肯定会经常用到性能优化方面的设计和考量,常常用涉及到MySQL索引。但是关于MyS...

  • mysql触发器怎么用,mysql触发器作用及使用案例

    mysql触发器怎么用,mysql触发器作用及使用案例

    mysql触发器怎么用,mysql触发器作用及使用案例1.什么是触发器 触发器(trigger):监视某种情况,并进行某种操作,它的执行并不是程序调用,也不是手工启动,而是由事件来触发,例如:对一张表进行操作(插入,更新,删除)时,就会触...

  • 周排行
  • 月排行
  • 年排行

精彩推荐