一些防范sql注入式攻击的比较有见地的代码(PHP)
2012-08-31 16:39
316 查看
$_POST = sql_injection($_POST); $_GET = sql_injection($_GET); function sql_injection($content) { if (!get_magic_quotes_gpc()) { if (is_array($content)) { foreach ($content as $key=>$value) { $content[$key] = addslashes($value); } } else { addslashes($content); } } return $content; } 做系统的话,可以用下面的代码,也是copy来的: /* 函数名称:inject_check() 函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全 参 数:$sql_str: 提交的变量 返 回 值:返回检测结果,ture or false */ function inject_check($sql_str) { return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 进行过滤 } /* 函数名称:verify_id() 函数作用:校验提交的ID类值是否合法 参 数:$id: 提交的ID值 返 回 值:返回处理后的ID */ function verify_id($id=null) { if (!$id) { exit('没有提交参数!'); } // 是否为空判断 elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断 elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断 $id = intval($id); // 整型化 return $id; } /* 函数名称:str_check() 函数作用:对提交的字符串进行过滤 参 数:$var: 要处理的字符串 返 回 值:返回过滤后的字符串 */ function str_check( $str ) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开 $str = addslashes($str); // 进行过滤 } $str = str_replace("_", "\_", $str); // 把 '_'过滤掉 $str = str_replace("%", "\%", $str); // 把 '%'过滤掉 return $str; } /* 函数名称:post_check() 函数作用:对提交的编辑内容进行处理 参 数:$post: 要提交的内容 返 回 值:$post: 返回过滤后的内容 */ function post_check($post) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开 $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace("_", "\_", $post); // 把 '_'过滤掉 $post = str_replace("%", "\%", $post); // 把 '%'过滤掉 $post = nl2br($post); // 回车转换 $post = htmlspecialchars($post); // html标记转换 return $post; } ?>
还有一个就是:
//预防数据库攻击的正确做法: <?php function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>
需要注意的是,mysql_real_escape_string()函数和addslashes()的功能类似。mysql_real_escape_string()效果更好。但因为mysql_real_escape_string()函数是必须在mysql连接之后才可以使用的.所以基于这个问题,我觉得还是使用addslashes()这个函数比较不错。
相关文章推荐
- 防范sql注入式攻击的比较有见地的代码(PHP)
- 如何避免PHP实例代码中的一些坏代码
- 一些常用的php简单命令代码集锦
- asp版的防范SQL注入式攻击代码
- Sql注入式攻击和一些防范技巧
- php的一些代码分页!
- 关于java web中自动运行一段代码的一些事儿(计时器、Date比较大小、自动运行代码)
- php与java语言的一些比较!
- php关于代码规范的一些小总结
- 谈谈关于PHP的代码安全相关的一些致命知识
- php5.3兼容之前php代码的一些改动
- PHP代码优化的一些技巧总结
- php一个比较基础的文件上传的代码
- mysql数据库差异比较的PHP代码
- PHP基础教程(php入门基础教程)一些code代码
- PHP(5)--总结php原生态的一些代码(不定时补充)
- 谈谈关于PHP的代码安全相关的一些致命知识
- DataSet相关的一些操作比较全面的代码