页:
[1]
| robinhunan | 2008-4-11 07:23 AM |
|
sql注入
最近看到phptek,
有sql注入,看来是个问题呢. 如果涉及金钱,比如订单这些被注入就麻烦了.
百度一下 ,居然搜到了 百度一下,找到相关网页约1,700,000篇,用时0.017秒
http://www.baidu.com/s?wd=sql+%D7%A2%C8%EB , 有的文章还好几页.介绍如何攻击.但是防范没有,非常搞笑的是还有做sql注入防火墙的厂商?
不知道 是不是我认识不到问题的严重性.还是把事情想象的太简单?
我做了以前也做过订票系统.并没有招受sql注入.
记得去年的时候 我和罗毅峰他们还讨论了很久sql注入.感谢毅峰和同事
有点婆婆妈妈了.言归正传
我总结了一下,数据库其实来,可以分成两种数据类型就行了
一个是数字型 ( int ,float,bigint ,统统的都是,这类简单,只需要要把得到的数字用intval或者floatval 转换,肯定没法攻击了)
另外一个非数字型 ( varchar,char,text,等一堆乱七八糟的东西)
主要是这类如何防止,sql注入? 我写了一个很简单用了很久的函数quote() 没有问题,如果不是我比较走运的话
理论上来说还是可用的?
但是用它我用来很久时间了.是没有问题的.
另外 有了quote()函数就在php.ini 把
;Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
如果是On的话,需要GET/POST/COOKIE这些变量的2倍内存,还要折磨cpu.同情一下他这个可怜的家伙.
common.php代码 ,
附件是c版本的
<?php
/**
* 防sql注入
* @author: zhuyubing@gmail.com
* */
/**
* reject sql inject
*/
if (!function_exists (quote))
{
function quote($var)
{
if (strlen($var))
{
$var=!get_magic_quotes_gpc() ? $var : stripslashes($var);
$var = str_replace("'","\'",$var);
}
return "'$var'";
}
}
if (!function_exists (hash_num)){
function hash_num($input)
{
$hash = 5381;
for ($i = 0; $i < strlen($str); $i++)
{
$c = ord($str{$i});
$hash = (($hash << 5) + $hash) + $c;
}
return $hash;
}
}
/**************** end *************************/
?>
<?php
/**
* 防sql测试代码
CREATE TABLE IF NOT EXISTS `tb` (
`id` int(10) unsigned NOT NULL auto_increment,
`age` tinyint(3) unsigned NOT NULL,
`name` char(100) NOT NULL,
`note` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
**/
include_once('common.php');
var_dump(hash_num('dddd'));
if(empty($_GET))
{
$_GET = array('age'=>'99','name'=>'a\'b\\\'c";','note'=>"a'b\'\nc#");
}
$age = (int)$_GET['age'];
$name = quote($_GET['name']);
$note = quote($_GET['note']);
$sql = "INSERT INTO `tb` ( `age`, `name`, `note`) VALUES
( $age, $name, $note)";
var_dump($sql);
?> |
| mdy_jun | 2008-4-16 02:29 AM |
|
| 呵呵。好理解。不错 |
|
| 很多人都是封装用的,框架,一载入的时候就已经防注入了。遍历POST,GET,SESSION,COOKIE等外部不可信变量,就算是FILE数组也要检查呢 |
| xieaotian | 2008-4-21 12:05 AM |
|
| 恩,学习啦:handshake |
| Ultrawind | 2008-4-21 02:22 AM |
|
| qh663 说的对,我也是这么做的 |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.012024 second(s), 2 queries |