首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止/保护来自用户的数据库条目

防止/保护来自用户的数据库条目
EN

Stack Overflow用户
提问于 2011-05-25 11:46:56
回答 3查看 54关注 0票数 1

我是sql的新手,如何让这段代码更安全,不受sql注入和错误操作的影响。

代码语言:javascript
复制
// Variables 
$db_host = 'localhost'; 
$db_user = 'user'; 
$db_pass = 'pass'; 
$db_name = 'db'; 

$Username = $_POST['username']; 
$Email    = $_POST['email'];     

// DB Connect
$connect = mysql_connect( $db_host, $db_user, $db_pass ) or die( mysql_error() ); 
$connection = $connect; 

mysql_select_db( $db_name, $connect ) or die( mysql_error() ); 

// Inserting into DB 
$qInsertUser = mysql_query(" INSERT INTO `database` (`id`, `username`, `email`) VALUES ( ``, `$Username`, `$Email`) "); 

if ($qInsertUser){ 
    echo "You are now subscribed to our newsletter. Thank you!"; 
} else { 
    echo "Error!"; 
}
EN

回答 3

Stack Overflow用户

发布于 2011-05-25 11:52:43

您可能应该使用prepared statements。而不是:

代码语言:javascript
复制
$qInsertUser = mysql_query(" INSERT INTO `database` (`id`, `username`, `email`) VALUES ( ``, `$Username`, `$Email`) "); 

将其替换为准备好的语句并执行:

代码语言:javascript
复制
$sth = $dbh->prepare('INSERT INTO `database` (`id`, `username`, `email`) VALUES (?, ?, ?)');
$sth->execute(array($id, $username, $email));

让图书馆为你处理所有的引用。

票数 1
EN

Stack Overflow用户

发布于 2011-05-25 11:51:25

确保您正在escaping这些值。而不是:

代码语言:javascript
复制
$Username = $_POST['username']; 
$Email    = $_POST['email'];    

试试这个:

代码语言:javascript
复制
$Username = mysql_real_escape_string($_POST['username']);
$Email = mysql_real_escape_string($_POST['email']);

请注意,这个答案并不是一个详尽的反SQL注入资源,但希望它能让您走上正确的道路。

票数 0
EN

Stack Overflow用户

发布于 2011-05-25 12:25:32

除了mysql_real_escape_string之外,还要尝试验证输入。用户不应该被允许输入任何内容。使用regexp语法和类型转换或settype。我的意思是在php的服务器端。仅仅使用javascript验证是不够的,我已经看到许多程序员和站长在js验证上花费了更多的精力,而在php中,他们根本不编写验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6119320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档