首页 > 后端开发 > 正文

php如何防止sql注入攻击?

2024-07-19 23:28:44 | 我爱编程网

小编今天整理了一些php如何防止sql注入攻击?相关内容,希望能够帮到大家。

本文目录一览:

php如何防止sql注入攻击?

php如何防止sql注入攻击?

注入式攻击的类型

可能存在许多不同类型的攻击动机,但是乍看上去,似乎存在更多的类型。这是非常真实的-如果恶意用户发现了一个能够执行多个查询的办法的话。本文后面,我们会对此作详细讨论。

果你的脚本正在执行一个SELECT指令,那么,攻击者可以强迫显示一个表格中的每一行记录-通过把一个例如 =1这样的条件注入到WHERE子句中,如下所示(其中,注入部分以粗体显示):

SELECT*FROMsitesWHEREsite='html580.com'OR1=1;'

正如我们在前面所讨论的,这本身可能是很有用的信息,因为它揭示了该表格的一般结构(这是一条普通的记录所不能实现的),以及潜在地显示包含机密信息的记录。

一条更新指令潜在地具有更直接的威胁。通过把其它属性放到SET子句中,一名攻击者可以修改当前被更新的记录中的任何字段,例如下面的例子(其中,注入部分以粗体显示):

UPDATEsitesSETsite='diygw.com'WHERE=

site='html580.com'

通过把一个例如1=1这样的恒真条件添加到一条更新指令的WHERE子句中,这种修改范围可以扩展到每一条记录,例如下面的例子:

UPDATEsitesSETsite='diygw.com'WHERE=

site='html580.comOR1=1;'

最危险的指令可能是DELETE-这是不难想像的。其注入技术与我们已经看到的相同-通过修改WHERE子句来扩展受影响的记录的范围,例如下面的例子:

DELETEFROMsitesSETsite='diygw.com'WHERE=

site='html580.comOR1=1;

php如何防止sql注入攻击?

php防sql注入漏洞可以用什么函数

1.函数的构建
function inject_check($sql_str) {
return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤
}
function verify_id($id=null) {
if (!$id) { exit('没有提交参数!'); } // 是否为空判断
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断
$id = intval($id); // 整型化
return $id;
}?
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;
}
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;
}
2.函数的使用实例
<?php
if (inject_check($_GET['id']))
{
exit('你提交的数据非法,请检查后重新提交!');
}
else
{
$id = $_GET['id'];
//处理数据………………
}
?>

php如何防止sql注入攻击?

php防止sql注入示例分析和几种常见攻击正则

我爱编程网(https://www.52biancheng.com)小编还为大家带来php防止sql注入示例分析和几种常见攻击正则的相关内容。

function customError($errno, $errstr, $errfile, $errline) 

echo "Error number: [$errno],error on line $errline in $errfile
"; 
die(); 

set_error_handler("customError",E_ERROR); 
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 
$postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 
$cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 
function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq)

if(is_array($StrFiltValue)) 

$StrFiltValue=implode($StrFiltValue); 

if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1&&!isset($_REQUEST['securityToken']))

slog("

操作IP: ".$_SERVER["REMOTE_ADDR"]."
操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."
操作页面:".$_SERVER["PHP_SELF"]."
提交方式: ".$_SERVER["REQUEST_METHOD"]."
提交参数: ".$StrFiltKey."
提交数据: ".$StrFiltValue); 
print "result notice:Illegal operation!"; 
exit(); 


foreach($_GET as $key=>$value)

StopAttack($key,$value,$getfilter); 

foreach($_POST as $key=>$value)

StopAttack($key,$value,$postfilter); 

foreach($_COOKIE as $key=>$value)

StopAttack($key,$value,$cookiefilter); 


function slog($logs) 

$toppath="log.htm"; 
$Ts=fopen($toppath,"a+"); 
fputs($Ts,$logs."\r\n"); 
fclose($Ts); 

?>
我爱编程网

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“php如何防止sql注入攻击?”相关推荐