[英]A reasonable level of security vs. sql injection?
我正准備啟動一個站點——我從頭開始編寫的第一個站點。 這將是低流量和低調的(可能不會被搜索引擎抓取。)我正在使用 PEAR 的 DB 庫及其 query() 方法的占位符來存儲用戶數據,如下所示:
<?php
require_once('db.inc');
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$rsvp = $_POST['rsvp'];
$mail = $_POST['email'];
$phone = $_POST['phone'];
$lodging = $_POST['lodging'];
$extra = $_POST['extra'];
$msg = $_POST['msg'];
$password = $_POST['password'];
$id = $_POST['id'];
$username = $firstname . ' ' . $lastname;
if (isset($id)) {
$sql = $conn->query("UPDATE guest SET username = ?, mail = ?, phone = ?, lodging = ?, extra = ?, msg = ?, role = ?, password = ?, mailed = ? WHERE id = ?", array($username, $mail, $phone, $lodging,$extra, $msg, 2, $password, 0, $id)); //TODO!! set mailed to 1 in production
} else {
$sql = $conn->query('INSERT INTO guest (username, password, rsvpstatus, role, mail, phone, lodging, extra, msg, mailed)VALUES (?,?,?,?,?,?,?,?)', array($username, $password, $rsvp, 2, $mail, $phone, $lodging, $extra, $msg, 1));
}
header('location:main.php');
與 sql 注入相比,這似乎是合理的保護水平嗎?
像您這樣的占位符和綁定正是針對 sql 注入的防御。 只要您從不直接將任何用戶輸入插入 sql,就可以了。
您可以在 PHP 中使用mysql_real_escape_string function(在 php.net 中查看 function )
轉義 unescaped_string 中的特殊字符,考慮到連接的當前字符集,以便將其放在 mysql_query() 中是安全的
例子:
$secure_firstname = mysql_real_escape_string( $_POST['firstname'] );
$secure_lastname = mysql_real_escape_string( $_POST['lastname'] );
只要該庫引用並轉義其所有 arguments,就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.