Php 什么是PDO,它与SQL注入有什么关系,以及我为什么要使用它?

Php 什么是PDO,它与SQL注入有什么关系,以及我为什么要使用它?,php,mysql,pdo,sql-injection,Php,Mysql,Pdo,Sql Injection,事实上,我在谷歌上搜索了很多结果,但我不明白,因为我是这个领域的新手 那么,什么是PDO的简单方法,为什么我应该使用它,什么是SQL注入,等等,通过一个例子?1 实际上现在我的代码是这样的 config.php insert.php 简单地想象一下这个用户输入:“1”);截断表帐户;-“,如果用户知道您的数据库结构,就可以轻松地删除数据库中的所有内容(假设数据库用户拥有授权) 切勿在sql查询中直接使用用户输入,如您所做的那样,请务必在使用前进行转义/强制转换 PDO-PHP数据对象-是一个

事实上,我在谷歌上搜索了很多结果,但我不明白,因为我是这个领域的新手

那么,什么是PDO的简单方法,为什么我应该使用它,什么是SQL注入,等等,通过一个例子?1

实际上现在我的代码是这样的

config.php

insert.php
简单地想象一下这个用户输入:
“1”);截断表帐户;-“
,如果用户知道您的数据库结构,就可以轻松地删除数据库中的所有内容(假设数据库用户拥有授权)

切勿在sql查询中直接使用用户输入,如您所做的那样,请务必在使用前进行转义/强制转换

PDO-PHP数据对象-是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可


请仔细阅读,它解释了为什么应该在php中使用pdo

简单地想象一下这个用户输入:
“1”);截断表帐户;-“
,如果用户知道您拥有什么样的数据库结构,就可以轻松地从数据库中删除所有内容(假设数据库用户拥有授权)

切勿在sql查询中直接使用用户输入,如您所做的那样,请务必在使用前进行转义/强制转换

PDO-PHP数据对象-是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可


请仔细阅读,它解释了为什么应该在php中使用pdo

简单地想象一下这个用户输入:
“1”);截断表帐户;-“
,如果用户知道您拥有什么样的数据库结构,就可以轻松地从数据库中删除所有内容(假设数据库用户拥有授权)

切勿在sql查询中直接使用用户输入,如您所做的那样,请务必在使用前进行转义/强制转换

PDO-PHP数据对象-是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可


请仔细阅读,它解释了为什么应该在php中使用pdo

简单地想象一下这个用户输入:
“1”);截断表帐户;-“
,如果用户知道您拥有什么样的数据库结构,就可以轻松地从数据库中删除所有内容(假设数据库用户拥有授权)

切勿在sql查询中直接使用用户输入,如您所做的那样,请务必在使用前进行转义/强制转换

PDO-PHP数据对象-是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可

请仔细阅读,它解释了为什么应该在php中使用pdo-php数据对象是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但它允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可

准备好的语句/参数化查询足以防止对该语句进行一阶注入。如果在应用程序中的任何其他位置使用未检查的动态SQL,则仍然容易受到二阶注入的攻击

二阶注入意味着数据在被包含到查询中之前已经在数据库中循环了一次,而且很难实现。顺便说一句,你几乎从来没有见过真正的二阶攻击,因为通过社会工程通常更容易实现

PDO比
mysql
.*稍慢一点,但它具有很好的可移植性。PDO提供跨多个数据库的单一接口。这意味着您可以使用多个DB,而无需使用mysql的mysql\u查询、SQLServer的mssql\u查询等。只需使用类似
$DB->query(“插入到…”)的内容即可
始终。无论您使用的是什么数据库驱动程序

所以,对于大型或可移植的项目,PDO更可取,甚至可以使用PDO


SQL注入

SQL注入

SQL注入是一种恶意用户可以通过网页输入将SQL命令注入SQL语句的技术

注入的SQL命令可能会改变SQL语句并损害web应用程序的安全性


PDO准备的语句是否足以防止SQL注入?

简而言之,答案是否,PDO准备将无法保护您免受所有可能的SQL注入攻击。攻击


如何使用PDO?

例如:

$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));
参考资料

PDO-PHP数据对象是一个数据库访问层,提供了访问多个数据库的统一方法

它不考虑特定于数据库的语法,但它允许切换数据库和平台的过程相当轻松,只需在许多实例中切换连接字符串即可

准备好的语句/参数化查询足以防止对该语句进行一阶注入。如果在应用程序中的任何其他位置使用未检查的动态SQL,则仍然容易受到二阶注入的攻击

二阶内射
<?php
    include('config.php');
    $account_no = $_POST['account_no'];
    $amount = $_POST['amount'];
    $save = mysql_query("INSERT INTO tableamount (account_no, amount) VALUES ('$account_no', '$amount',)");
    header("location: index.html");
    exit();
?>
<html>
    <body>
        <form action="amount.php" method="post" enctype="multipart/form-data" name="addroom">
            Account Number<br />
            <input name="account_no" type="text"/><br />

            Amount<br />
            <input name="amount" type="text"/><br />

            <input type="submit" name="Submit" value="Submit" id="button1" />
        </form>
    </body>
</html>
$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));