Chinaunix

标题: sql 注入的简单解决方案 [打印本页]

作者: tsingson    时间: 2004-01-30 00:18
标题: sql 注入的简单解决方案
sql 注入是对 数据库进行 sql 黑客的一种方法,具体是在不规范的程序代码如 php 或 cgi 输入中,加入别的 sql 语句从而获得到一些数据或进行一些不合法的操作。

一般来说, sql 注入有两个条件,一是数据表名被人查出,二是 sql 语句检查出问题,不合法的数据成为 sql 语句的一部分。
简单处理方法:

数据表名要在程序处理中加前缀,让别人不知道数据表名。
如 这样的语句一定有问题

Code       

$db = $cgi->;param('db');

$user_email = $cgi->;param('user_mail');

$sql = qq(select user_id,user_name,user_password from "$db" where user_mail = "$user_mail");

....

解决就是

Code       

select user_id,user_name,user_password from "bbs_user_$db" where user_mail = "$user_mail";

但这方法还是有问题,如果用户输入 user_email = "tsingson@perlchina.org;delete from bbs_user;"
那么 sql 注入就删除用户表了!!!!
所以,最好的方法是用 dbi 的占位符处理


Code       

$sql = qw(select user_id,user_name,user_password from ? where user_mail = ?);

$sth = $dbh->;prepare($sql);

$sth->;do($db,$user_mail);

这样就比直接使用 sql 语句安全多了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2