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