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