簡體   English   中英

與 sql 注入相比,合理的安全級別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM