当前位置:Gxlcms > PHP教程 > php防范sql注入的一些代码收集

php防范sql注入的一些代码收集

时间:2021-07-01 10:21:17 帮助过:21人阅读

本文介绍下,在php中,实现sql注入的一些代码,供大家学习参考。

专题推荐:php防止sql注入

防范sql注入的代码:

  1. <!--?php
  2. /**
  3. * 防范sql注入
  4. * edit bbs.it-home.org
  5. */
  6. $_POST = sql_injection($_POST);
  7. $_GET = sql_injection($_GET);
  8. function sql_injection($content)
  9. {
  10. if (!get_magic_quotes_gpc()) {
  11. if (is_array($content)) {
  12. foreach ($content as $key=-->$value) {
  13. $content[$key] = addslashes($value);
  14. }
  15. } else {
  16. addslashes($content);
  17. }
  18. }
  19. return $content;
  20. }
  21. ?>

下面这个适合在php oop面向对象的程序中使用:

  1. <!--?php
  2. /*
  3. 函数名称:inject_check()
  4. 函数作用:检测提交的值是不是含有SQL注射的字符
  5. 参  数:$sql_str: 提交的变量
  6. 返 回 值:返回检测结果,ture or false
  7. */
  8. function inject_check($sql_str) {
  9. return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 进行过滤
  10. }
  11. /*
  12. 函数名称:verify_id()
  13. 函数作用:校验提交的ID类值是否合法
  14. 参  数:$id: 提交的ID值
  15. 返 回 值:返回处理后的ID
  16. */
  17. function verify_id($id=null) {
  18. if (!$id) { exit('没有提交参数!'); } // 是否为空判断
  19. elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断
  20. elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断
  21. $id = intval($id); // 整型化
  22. return $id;
  23. }
  24. /*
  25. 函数名称:str_check()
  26. 函数作用:对提交的字符串进行过滤
  27. 参  数:$var: 要处理的字符串
  28. 返 回 值:返回过滤后的字符串
  29. */
  30. function str_check( $str ) {
  31. if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开
  32. $str = addslashes($str); // 进行过滤
  33. }
  34. $str = str_replace("_", "\_", $str); // 把 '_'过滤掉
  35. $str = str_replace("%", "\%", $str); // 把 '%'过滤掉
  36. return $str;
  37. }
  38. /*
  39. 函数名称:post_check()
  40. 函数作用:对提交的编辑内容进行处理
  41. 参  数:$post: 要提交的内容
  42. 返 回 值:$post: 返回过滤后的内容
  43. */
  44. function post_check($post) {
  45. if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开
  46. $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
  47. }
  48. $post = str_replace("_", "\_", $post); // 把 '_'过滤掉
  49. $post = str_replace("%", "\%", $post); // 把 '%'过滤掉
  50. $post = nl2br($post); // 回车转换
  51. $post = htmlspecialchars($post); // html标记转换
  52. return $post;
  53. }
  54. ?-->

这里,再提供一个代码。 //预防数据库攻击的正确做法:

  1. <!--?php
  2. function check_input($value)
  3. {
  4. // 去除斜杠
  5. if (get_magic_quotes_gpc())
  6. {
  7. $value = stripslashes($value);
  8. }
  9. // 如果不是数字则加引号
  10. if (!is_numeric($value))
  11. {
  12. $value = "'" . mysql_real_escape_string($value) . "'";
  13. }
  14. return $value;
  15. }
  16. $con = mysql_connect("localhost", "hello", "321");
  17. if (!$con)
  18. {
  19. die('Could not connect: ' . mysql_error());
  20. }
  21. // 进行安全的 SQL
  22. $user = check_input($_POST['user']);
  23. $pwd = check_input($_POST['pwd']);
  24. $sql = "SELECT * FROM users WHERE
  25. user=$user AND password=$pwd";
  26. mysql_query($sql);
  27. mysql_close($con);
  28. ?-->

注意: mysql_real_escape_string()函数和addslashes()的功能类似。 mysql_real_escape_string()效果更好。 由于 mysql_real_escape_string()函数是必须在mysql连接之后才可以使用的,基于此,建议使用addslashes()函数进行处理。

人气教程排行