文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php sql注入

2023-08-30 23:22

关注

文章目录

一、什么是sql注入

在应用程序中,为了和用户交互,允许用户提交输入数据,假如应用程序并没有对用户输入数据进行处理,攻击者可以输入一些跟sql语句相关的字符串(一般带有特殊字符)从而让应用程序执行危险的 SQL 操作,导致泄漏机密数据(比如用户信息)或直接修改删除线上的数据。

在这里插入图片描述

二、sql注入处理

1、使用内置函数

函数一: mysqli_real_escape_string

作用: 转义在 SQL 语句中使用的字符串中的特殊字符

语法:

mysqli_real_escape_string($connection, $escapestring);选项参数:connection必需。规定要使用的 MySQL 连接。escapestring必需。要转义的字符串。编码的字符是 NUL(ASCII 0)、\n、\r、\、'、" 和 Control-Z。

函数二: addcslashes() (主要用来防止like语句注入)

作用: 使用反斜线转义字符串中的字符

语法:

addcslashes($string, $characters)选项参数:string必需。规定要转义的字符串。characters必需。规定要转义的字符或字符范围。

例:

//获取用户名$username = $_GET['username']; //将特殊字符转义为普通字符$username = addcslashes(mysqli_real_escape_string($conn, $username), "%_");//执行sql语句操作mysqli_query($conn, "SELECT FROM messages WHERE username LIKE '{$username}%'");

2、使用pdo预处理语句

pdo 预处理语句会对占位符绑定的值进行处理,也可以有效防止sql注入攻击

函数: PDO::prepare

语法:

public PDO::prepare(string $query, array $options = []): PDOStatement|false选项参数:query:必须是对目标数据库服务器有效的 SQL 语句模板。options:数组包含一个或多个 key=>value 键值对,为返回的 PDOStatement 对象设置属性。 常见用法是:设置 PDO::ATTR_CURSOR 为 PDO::CURSOR_SCROLL,将得到可滚动的光标。 某些驱动有驱动级的选项,在 prepare 时就设置。

例:

$sql = 'SELECT name, colour, calories    FROM fruit    WHERE calories < :calories AND colour = :colour';    $sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);$sth->execute(['calories' => 150, 'colour' => 'red']);$red = $sth->fetchAll();$sth->execute([':calories' => 175, ':colour' => 'yellow']);$yellow = $sth->fetchAll();

三、安全注意事项

  1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
  2. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
  6. sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具 、MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

来源地址:https://blog.csdn.net/change_any_time/article/details/128698821

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯