php防止sql注入漏洞都有哪些函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php防止sql注入漏洞都有哪些函数相关的知识,希望对你有一定的参考价值。

一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。
对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数据库方案),考虑以下简单的登录表单:
<form action="/login.php" method="POST">
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="password" name="password" /></p>
<p><input type="submit" value="Log In" /></p>
</form>
作为一个攻击者,会从推测验证用户名和密码的查询语句开始。通过查看源文件,就能开始猜测站长的习惯。
比如命名习惯。通常会假设表单中的字段名为与数据表中的字段名相同。当然,确保它们不同未必是一个可靠的安全措施。
第一次猜测,一般会使用下面例子中的查询:
<?php
$password_hash = md5($_POST['password']);

$sql = "SELECT count(*)
FROM users
WHERE username = '$_POST['username']'
AND password = '$password_hash'";
?>
当然,攻击者未必在第一次就能猜中,常常还需要做一些试验。有一个比较好的试验方式是把单引号作为用户名录入,原因是这样可能会暴露一些重要信息。有很多开发人员在mysql语句执行出错时会调用函数mysql_error()来报告错误。见下面的例子:
<?php
mysql_query($sql) or exit(mysql_error());
?>
关于SQL注入,不得不说的是现在大多虚拟主机都会把magic_quotes_gpc选项打开,在这种情况下所有的客户端GET和POST的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是不可行的,但要防止对数字值的SQL注入,如用intval()等函数进行处理。
参考技术A Version:0.9
Starthtml:-1
EndHTML:-1
StartFragment:0000000111
EndFragment:0000022042

/**
* 检查数据
* @param $args
* @return mixed
*/
function check_data($args)

$args_arr=array(
'xss'=>"(EXTRACTVALUE|EXISTS|UPDATEXML)\\b.+?(select|concat)|[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]3,15[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)",
'sql'=>"(EXTRACTVALUE|EXISTS|UPDATEXML)\\b.+?(select|concat)|[^\\\\s]1(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\\\s]1(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)",
'other'=>"\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]"
);
foreach($args_arr as $key=>$value)

if (preg_match("/".$value."/is",$args) == 1)

//W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str);
//print "您的提交带有不合法参数,谢谢合作";
api_inc::error("您的提交带有不合法参数,谢谢合作!");
exit();


return $args;
本回答被提问者采纳

sql注入漏洞都有哪些

SQL注入漏洞有哪些

SQL注入攻击是当今最危险、最普遍的基于Web的攻击之一。所谓注入攻击,是攻击者把SQL命令插入到Web表单的输入域页面请求的查询字符串中,如果要对一个网站进行SQL注入攻击,首先需要找到存在SQL注入漏洞的地方,也是寻找所谓的注入点。SQL注入点一般存在于登录页面、查找页面或添加页面等用户可以查找或修改数据的地方。

SQL注入漏洞有哪些

最常用的寻找SQL注入点的方法,是在网站中寻找如下形式的页面链接:http://www.xxx.com/xxx.asp?id=YY,其中“YY”可能是数字,也有可能是字符串,分别被称为整数类型数据或者字符型数据。在本章中我们主要针对整数型数据进行SQL注入讲解。

通常可以使用以下两种方法进行检测,判断该页面链接是否存在SQL注入漏洞。

加引号”法

在浏览器地址栏中的页面链接地址后面增加一个单引号,如下所示:http://www.xxx.com/xxx.asp?id=YY’,然后访问该链接地址,浏览器可能会返回类似于下面的错误提示信息:Microsoft JET Database Engine 错误’80040e14’,字符串的语法错误在查询表达式’ID=YY’中。

如图所示,页面中如果返回了类似的错误信息,说明该网站可能存在SQL注入攻击的漏洞。

“1=1和1=2”法

“加引号”法很直接,也很简单,但是对SQL注入有一定了解的程序员在编写程序时,都会将单引号过滤掉。如果再使用单引号测试,无法检测到注入点了。这时,可以使用经典的“1=1和1=2”法进行检测。


如果正常页面链接地址为:http://www.xxx.com/xxx.asp? id=YY,在浏览器中分别输入以下两个链接地址,分别查看它们返回的结果值。


http:// www.xxx.com/xxx.asp? id=YY    and    1=1。

http://  www.xxx.com/xxx.asp? id=YY    and   1=2。

如果存在注入点的话,浏览器将会分别显示为:

正常显示,内容与正常页面显示的结果基本相同。

提示BOF或EOF(程序没做任何判断时),或提示找不到记录,或显示内容为空(程序加了on error resume next),如图所示。

如果没有注入点的存在,也很容易判断。

述两种链接一般都会有程序定义的错误提示,或提示类型转换时出错。

再次提醒:可能的SQL注入点一般存在于登录页面、查找页面或添加页面等用户可以查找或修改数据的地方

参考技术A 打开腾讯智慧安全页面
然后在里面找到御点终端安全系统
接着选择上方产品选项,在里面选择腾讯御点,修复漏洞

以上是关于php防止sql注入漏洞都有哪些函数的主要内容,如果未能解决你的问题,请参考以下文章

sql注入漏洞都有哪些

SQL注入漏洞扫描工具都有哪些

怎么检测网站存在注入漏洞 防注入都有哪些解决办法

sql注入漏洞如何修复

常见的漏洞类型都有哪些

在电商网站开发中都有哪些常见漏洞