娱乐
防止sql注入(如何防止SQL注入攻击)
如何防止SQL注入攻击nerror="javascript:errorimg.call(this);">

什么是 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注入攻击nerror="javascript:errorimg.call(this);">

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

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

# 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' %00' OR '1'='1' %16

如何防止 SQL 注入?

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

  1. 永远不要相信用户输入。在动态 SQL 语句中使用它们之前,应始终对它们进行清理。
    存储过程——允许您封装 SQL 语句并将所有输入视为参数。
  2. Prepared Statements——准备好的语句,首先构建 SQL 语句,然后将提交的用户数据作为参数处理。这不会影响 SQL 语句的语法。
    正则表达式 — 可用于检测潜在的恶意代码并在执行 SQL 语句之前将其删除。
  3. 数据库连接用户权限——用于连接数据库的帐户应该只被授予必要的权限。这有助于降低服务器上 SQL 语句的性能。
  4. 错误消息——这些消息不会泄露敏感信息或错误的确切位置。“抱歉,出现技术错误。我已经联系了技术团队。稍后再试”,而不是显示导致错误的 SQL 语句。

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

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

如果你发现我的任何文章对你有帮助或者有用,麻烦点赞或者转发。 谢谢!


顶一下()     踩一下()

热门推荐

发表评论
0评