如何在PHP中防止SQL注入
发布:smiling 来源: PHP粉丝网 添加日期:2020-01-07 15:38:57 浏览: 评论:0
本篇文章将给大家介绍关于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驱动程序防止SQL注入的方法。下面我们来看具体的内容。
简单的SQL注入示例:
例如,A有一个银行网站。已为银行客户提供了一个网络界面,以查看其帐号和余额。您的银行网站使用http://example.com/get_account_details.php?account_id=102等网址从数据库中提取详细信息。
例如,get_account_details.php的代码如下所示。
$accountId = $_GET['account_id'];
$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = $accountId";
客户accountId通过查询字符串作为account_id传递。与上面的Url一样,如果用户的帐户ID为102并且它在查询字符串中传递。Php脚本将创建如下所示的查询。
$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 102";
accountId 102获取accountNumber和余额详细信息,并提供给客户。
我们假设另一个场景,智能客户已经通过了account_id,就像0 OR 1=1查询字符串一样。现在会发生什么?PHP脚本将创建如下所示的查询并在数据库上执行。
$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 0 OR 1=1";
查看由脚本和数据库返回的结果创建的查询。您可以看到此查询返回了所有帐号和可用余额。
这称为SQL注入。这是一个简单的方式,其实可以有很多方法来进行SQL注入。下面我们就来看一下如何使用PHP MySQLi驱动程序和PHP PDO驱动程序防止SQL注入。
使用PHP-MySQLi驱动程序:
可以使用PHP-MySQLi驱动程序预处理语句来避免这些类型的SQL注入。
PHP防止SQL注入的代码如下:
- $accountId = $_GET['account_id'];
- if ($stmt = $mysqli->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = ?')) {
- $stmt->bind_param("s", $accountId);
- $stmt->execute();
- $result = $stmt->get_result();
- while ($row = $result->fetch_assoc()) {
- // do something here
- //phpfensi.com
- }
- $stmt->close();
- }
使用PHP-PDO驱动程序:
可以使用PHP-PDO驱动程序prepare语句来避免这些类型的SQL注入。
PHP解决上面的SQL注入问题的代码如下:
- $accountId = $_GET['account_id'];
- if ($stmt = $pdo->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = :accountId')) {
- $stmt->execute(array('name' => $name));
- foreach ($stmt as $row) {
- // do something here
- }
- //phpfensi.com
- $stmt->close();
- }
Tags: SQL注入
- 上一篇:php事务的实现方法介绍(代码示例)
- 下一篇:如何获取PHP字符串的最后n个字符
相关文章
- ·在PHP中全面阻止SQL注入式攻击(2013-11-13)
- ·php中防xss攻击和sql注入详解(2014-03-25)
- ·PHP登录中的防止sql注入方法分析(2014-08-21)
- ·php $_GET $_POST过滤sql注入程序代码(2014-08-22)
- ·php防止sql注入原理介绍(2014-08-22)
- ·php防止sql注入之过滤分页参数(2014-08-22)
- ·PHP网页防范SQL注入方法配置(2014-08-22)
- ·php sql注入与防注入经典案例分析(2014-08-23)
- ·php安全,防止sql注入攻击简单方法(2014-08-23)
- ·php 防止sql注入的有效处理方法(2014-08-23)
- ·php mysql防止sql注入详细说明(2014-08-25)
- ·有效防止SQL注入漏洞详细说明(2014-08-25)
- ·最实用有效的PHP中防止SQL注入(2015-04-04)
- ·php 防止SQL注入的几种方法(2015-04-13)
- ·php中sql注入漏洞示例 sql注入漏洞修复(2020-08-31)
- ·PHP防范SQL注入的具体方法详解(测试通过)(2020-12-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)