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过来的数据或多或少都包含这些关键字,难道杀一儆百?虽然这样更安全,但不方便。
所以我采用上一个方法,如果上一个方法有上面不好之处或者疑问,可以留言讨论。:)
相关文档:
方法一:
DB1 tb1
DB2 tb2
选择DB1 到表的列表那里
选择tb1表 右键 所有任务 数据导出
下一步 选择你要导出的数据库DB1 下一步 选择你要导入的数据库DB2
下一步 选择你要导的表(前面画勾)tb1, 后面对应的是新数据库的表名tb2(默认是相同表名,可修改) 下一步 完了 ......
centos 64位 和32位安装有一些不同
安装apache
安装mysql
需要用到的包
zlib-1.2.3.tar.gz
libiconv-1.11.tar.gz
freetype-2.3.5.tar.gz
libpng-1.2.20.tar.gz
jpegsrc.v6b.tar.gz
gd-2.0.35.tar.gz
ibxml2-sources-2.6.30.tar.gz
gettext
1. zlib
tar zxvf zlib-1.2.3.tar.gz
cd zlib ......
在存储过程或触发器中使用 Transact-SQL 游标的典型过程为:
声明 Transact-SQL 变量包含游标返回的数据。为每个结果集列声明一个变量。声明足够大的变量来保存列返回的值,并声明变量的类型为可从列数据类型隐式转换得到的数据类型。
使用 DECLARE CURSOR 语句将 Transact-SQL 游标与 SELECT 语句相关联。另外,D ......
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
fr ......
今天写网站的时候很囧啊,发现查找用户权限的时候无缘无故的同一个权限重复出现很多次
修改后的SQL语句如下
SELECT
node
.
id
,
node
.
name
,
access
.
role_id
from
think_role_user
AS
user
,
think_access
AS
access
,
think_node
AS
node
WHERE
user
.
user_id
=
......