PHP SQL注入防止、馬掛け防止、クロスステーション攻撃防止

2298 ワード

SQL注入攻撃は、攻撃者がフォームやアドレスバーに丹念に構築されたsql文を提出し、元のsql文を変更し、プログラムが提出したデータを厳格に検査しなければ、sql注入攻撃をもたらす.
SQL注入はデータベースを操作するため、一般的にSQL文キーワード:insert、delete、update、selectを検索し、渡された変数パラメータがユーザーが制御できるかどうか、安全処理をしたことがあるかどうかを確認します.
SQL注入攻撃を防止するいくつかの関数:
/**
+----------------------------------------------------------
*    、     、 sql    
+----------------------------------------------------------
*$date      ,         ;$ignore_magic_quotes       
+----------------------------------------------------------
*/
function in($data,$ignore_magic_quotes=false)
{
	if(is_string($data))
	{
		$data=trim(htmlspecialchars($data));//     ,    
		if(($ignore_magic_quotes==true)||(!get_magic_quotes_gpc())) 
		{
		   $data = mysql_real_escape_string($data);//  sql  
		}
		return  $data;
	}
	else if(is_array($data))//           
	{
		foreach($data as $key=>$value)
		{
			 $data[$key]=in($value);
		}
		return $data;
	}
	else 
	{
		return $data;
	}	
}
は更に関数を貼って、他の人がhtmlとiframeのを残すことを防ぎます
function html_in($str)
{
	$search = array ("'<script[^>]*?>.*?</script>'si",  //    javascript
					 "'<iframe[^>]*?>.*?</iframe>'si", //   iframe
					);
	$replace = array ("",
					  "",
					);			  
   $str=@preg_replace ($search, $replace, $str);
   $str=htmlspecialchars($str);
   	if(!get_magic_quotes_gpc()) 
	{
  	  $str = addslashes($str);
	}
   return $str;
}
discuzのphp防止sql注入関数:
$magic_quotes_gpc = get_magic_quotes_gpc();
@extract(daddslashes($_COOKIE));
@extract(daddslashes($_POST));
@extract(daddslashes($_GET));
if(!$magic_quotes_gpc) {
$_FILES = daddslashes($_FILES);
}
 
 
function daddslashes($string, $force = 0) {
if(!$GLOBALS['magic_quotes_gpc'] || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}