SQL注入法Post
SQL Injection Method Post
是否可以在不使用任何形式的情况下发送带有 SQL 注入的 POST 请求?假设一个应用程序使用带有 id 参数的 GET 方法来检查数据库是否存在该 id,如果我们改用 POST 方法可以做到吗?
SQL 注入可以通过 any 机制发生,用户数据直接在查询中结束。它不依赖于 GET 与 POST,甚至不依赖于 HTTP。
您可以 SQL 注入 with OCR. You can SQL inject with barcodes。您可以 SQL 在有人粗心且未正确转义数据时随时注入。
这就是为什么对所有查询使用带有占位符值的准备好的语句很重要。
为什么 GET 与 POST 数据的安全性存在差异?
$sql = "SELECT * FROM products WHERE id = {$_GET['id']}";
对比
$sql = "SELECT * FROM products WHERE id = {$_POST['id']}";
在这两种情况下,它都是不受信任的内容,将其插入到您的 SQL 查询中是不安全的。
使用查询参数。那么你就不用担心数据从哪里来了。
$sql = "SELECT * FROM products WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute( [ $_POST['id'] ] );
使用查询参数既简单又安全!
是否可以在不使用任何形式的情况下发送带有 SQL 注入的 POST 请求?假设一个应用程序使用带有 id 参数的 GET 方法来检查数据库是否存在该 id,如果我们改用 POST 方法可以做到吗?
SQL 注入可以通过 any 机制发生,用户数据直接在查询中结束。它不依赖于 GET 与 POST,甚至不依赖于 HTTP。
您可以 SQL 注入 with OCR. You can SQL inject with barcodes。您可以 SQL 在有人粗心且未正确转义数据时随时注入。
这就是为什么对所有查询使用带有占位符值的准备好的语句很重要。
为什么 GET 与 POST 数据的安全性存在差异?
$sql = "SELECT * FROM products WHERE id = {$_GET['id']}";
对比
$sql = "SELECT * FROM products WHERE id = {$_POST['id']}";
在这两种情况下,它都是不受信任的内容,将其插入到您的 SQL 查询中是不安全的。
使用查询参数。那么你就不用担心数据从哪里来了。
$sql = "SELECT * FROM products WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute( [ $_POST['id'] ] );
使用查询参数既简单又安全!