php对sql injection的防范
对http request过来的数据,凡是含有单引号,双引号,反斜线等都进行加斜线处理。防止进行注入操作。
/*
堵SQL漏洞
*/
function quotes($content){
//如果magic_quotes_gpc=Off,那么就开始处理
if (!get_magic_quotes_gpc()) {
//判断$content是否为数组
if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无
foreach ($content as $key=>$value) {
$content[$key] = mysql_real_escape_string($value);
}
} else {
//如果$content不是数组,那么就仅处理一次
$content = mysql_real_escape_string($content);
}
}
//返回$content
return $content;
}
当传递过来的参数是一个id的话。那么我们可以直接用 $id = intval($_GET('id'));进行int型处理(用settype也行)。
网上也有人是对其关键字过滤进行处理的,如:
function inject_check($sql_str){
return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤
}
我觉得此方法不可取是因为我在一个大的输入框里POST过来的数据或多或少都包含这些关键字,难道杀一儆百?虽然这样更安全,但不方便。
所以我采用上一个方法,如果上一个方法有上面不好之处或者疑问,可以留言讨论。:)
相关文档:
转自:http://jianghaifeng.blogchina.com/3841741.html
SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实、最有效的手段,有时甚至是唯一的手段,比如在不允许大幅度修改现有数据库结构的情况下。
通过优化SQL语句提高查询性能的关键是:
根据实际需求情况,建立合适的索引;
......
CREATE FUNCTION dbo.UF_GetInvoiceSerials( @bizCode VARCHAR(10))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @ret AS VARCHAR(1000)
SELECT @ret=Coalesce(@ret + ', ','') +
CASE e.ID
  ......
方案1 适用于oracle9i以上!
select * from
(select row_number() over(order by sendid desc) rn,m.* from xxt_msgreceive m )
where rn <1010 and rn>=1000
方案2
SELECT * from (SELECT A.*, ROWNUM RN from (SELECT * from xxt_msg where sendstatus=1 order by msgid desc) A WHERE ROWNUM < ......
select d.code,d.name, sum(w.weight) weight,round(avg(w.price),2) price,sum(w.money) money
from weight_info w left outer join t_dict d on w.productcode=d.code left outer join t_balancecode b on w.balancecode=b.balancecode where 1=1 and w.operdate>TO_TIMESTAMP('2009-11-2 04:12:32.0', ' ......