防止sql注入函数
1. 函数 `customError` 用于处理错误,将自定义错误输出并停止脚本执行。
2. 设置了错误处理函数 `customError`,它将捕捉并处理 E_ERROR 级别的错误。
3. `$getfilter`、`$postfilter` 和 `$cookiefilter` 变量定义了正则表达式模式,用于检测恶意的 SQL 注入尝试。
4. 函数 `StopAttack` 用于阻止潜在的 SQL 注入攻击。它检查通过 GET、POST 和 COOKIE 传递的参数。
5. 如果 `$_REQUEST['securityToken']` 未设置,且参数值与定义的模式匹配,`StopAttack` 函数将记录攻击日志并终止脚本执行。
6. `slog` 函数用于记录日志,将日志信息追加到 `log.htm` 文件中。
注意:这段代码虽然是为了防止 SQL 注入而设计的,但它使用了正则表达式来过滤参数,这可能会对合法输入造成误拦截。在实际应用中,更推荐使用参数化查询和准备语句来防止 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'];
//处理数据………………
}
?>
③ 怎样利用instr()函数防止SQL注入攻击
学asp一段时间,面临SQL注入攻击问题,需利用instr()函数预防。instr()函数用于查找字符串中特定字符或字符串首次出现的位置。具体代码如下:
If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then response.redirect "index.asp"
instr()函数语法如下:
InStr([start, ]string1, string2[, compare])
该函数参数包括:
- start:可选,设置搜索开始位置,默认从第一个字符开始。若为Null,将出现错误。必须有compare参数时提供。
- string1:必选,搜索的字符串表达式。
- string2:必选,要搜索的字符串表达式。
- compare:可选,指示比较类型,默认为二进制比较。值为:
- vbBinaryCompare:0,执行二进制比较。
- vbTextCompare:1,执行文本比较。
instr()函数返回值如下:
- 返回字符串在另一个字符串中首次出现的位置。
- 若未找到匹配字符串,返回0。
- 若参数为Null,返回Null。
示例使用instr()查找字符串:
Dim SearchString, SearchChar, MyPos
SearchString = "XXpXXpXXPXXP" '要搜索的字符串
SearchChar = "P" '搜索字符
MyPos = instr(4, SearchString, SearchChar, 1) '文本比较从第四个字符开始,返回6
MyPos = instr(1, SearchString, SearchChar, 0) '二进制比较从第一个字符开始,返回9
MyPos = instr(SearchString, SearchChar) '默认二进制比较,返回9
MyPos = instr(1, SearchString, "W") '二进制比较从第一个字符开始,返回0(未找到)
instr()函数主要用于检查用户输入中是否包含特定字符或字符串,如空格、单引号等。若instr(Request("id")," ")>0或instr(Request("id"),"'")>0,则可能遭受SQL注入攻击。通过在代码中添加instr()函数,可以有效防止攻击。
例如:
If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then response.redirect "index.asp"
这段代码检查了用户输入中是否包含空格或单引号,若存在,则直接重定向到"index.asp",避免SQL注入攻击。这种方法简单有效,无需在检查列表中添加所有可能的攻击字符。只需确保检查了关键字符,如空格、单引号、分号等,即可有效防御SQL注入。
总结:利用instr()函数,根据输入字符串中特定字符的出现情况,可以有效防止SQL注入攻击。通过简单检查空格和单引号的出现,即可实现基本的安全防御。这种方法适用于预防基础的SQL注入尝试,确保代码安全运行。