Что такое PDO, как оно связано с SQL-инъекцией и почему я должен это использовать?

На самом деле я сделал Google и получил так много результатов, но я не могу понять, потому что я новичок в этой области.

Так что же это за простой способ, что такое PDO, почему я должен это использовать, что такое SQL-инъекция и т. Д. С примером? 1

На самом деле сейчас мой код такой.

config.php

<?php
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "testdb";
$prefix = "";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $bd) or die("Could not select database");
?>

insert.php

<?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();
?>

index.html

<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>

0

Решение

PDO — объекты данных PHP это уровень доступа к базе данных, обеспечивающий единый метод доступа к нескольким базам данных.

Он не учитывает специфический для базы данных синтаксис, но может позволить довольно безболезненно переключать базы данных и платформы, просто во многих случаях переключая строку подключения.

Введите описание изображения здесь

Подготовленных операторов / параметризованных запросов достаточно, чтобы предотвратить внедрение первого порядка в этот оператор. Если вы используете непроверенный динамический SQL где-либо еще в вашем приложении, вы по-прежнему уязвимы для внедрения второго порядка.

Внедрение второго порядка означает, что данные были циклически пройдены по базе данных, прежде чем они были включены в запрос, и их намного сложнее выполнить. AFAIK, вы почти никогда не видите настоящих атак второго порядка, так как обычно легче внедрить их в социальную сеть.

PDO немного медленнее, чем mysql_ *. Но он обладает отличной мобильностью. PDO обеспечивает единый интерфейс для нескольких баз данных. Это означает, что вы можете использовать несколько БД, не используя mysql_query для mysql, mssql_query для SQL Server и т. Д. Просто используйте что-то вроде $db->query("INSERT INTO...") всегда. Независимо от того, какой драйвер базы данных вы используете.

Итак, для более крупного или портативного проекта PDO предпочтительнее. Четное Zend Framework использует PDO.


SQL-инъекция

SQL-инъекция

Внедрение SQL — это метод, при котором злоумышленники могут вводить команды SQL в оператор SQL посредством ввода с веб-страницы.

Внедренные команды SQL могут изменить оператор SQL и поставить под угрозу безопасность веб-приложения.


Достаточно ли подготовленных операторов PDO для предотвращения внедрения SQL?

Краткий ответ: НЕТ, PDO готовит волю не защитит вас от всевозможных SQL-инъекций. нападки пример


Как использовать PDO?

Пример:

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

Рекомендации

3

Другие решения

Просто представьте этот пользовательский ввод: "1'); TRUNCATE TABLE accounts; --"С вашим утверждением, если пользователь знает, какая у вас структура БД, вы можете легко удалить все из БД (при условии, что у пользователя БД есть полномочия.

Никогда не используйте пользовательский ввод непосредственно в SQL-запрос, как вы сделали, всегда избегайте / кастуйте перед использованием.

PDO — PHP Data Objects — это уровень доступа к базе данных, обеспечивающий единый метод доступа к нескольким базам данных.

Он не учитывает специфичный для базы данных синтаксис, но может позволить сделать процесс переключения баз данных и платформ достаточно безболезненным, просто переключая строку подключения во многих случаях.

Пожалуйста, прочитайте эта ссылка осторожно, это объясняет, почему pdo следует использовать в php

0

По вопросам рекламы [email protected]