>백엔드 개발 >PHP 튜토리얼 >SQL 주입을 방지하기 위한 PHP의 일부 코드 모음

SQL 주입을 방지하기 위한 PHP의 일부 코드 모음

WBOY
WBOY원래의
2016-07-25 08:58:22882검색
本文介绍下,在php中,实现sql注入的一些代码,供大家学习参考。

专题推荐:php防止sql注入

防范sql注入的代码:

<?php
/**
* 防范sql注入
* edit bbs.it-home.org
*/
$_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;  
}  
?>

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

<?php 
/*  
函数名称: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()函数进行处理。



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.