很多站长朋友们都不太清楚防sql注入函数PHP,今天小编就来给大家整理防sql注入函数PHP,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php防sql注入漏洞可以用什么函数 2、 php如何防止sql注入 3、 php防止sql注入以及xss跨站脚本攻击 4、 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注入一种有效的方法是使用参数化查询。在参数化查询中,你预先定义好查询语句,然后将变量放在占位符处。当执行查询时,您可以安全地将值绑定到占位符上,而不会有任何 SQL 注入攻击的风险。例如:
================
$query = "SELECT * FROM users WHERE username = :username AND password = :password";
$stmt = $db->prepare($query);
$stmt->bindValue(':username', $username);
$stmt->bindValue(':password', $password);
$stmt->execute();
================
这里的 :username 和 :password 是占位符,在执行查询时,会将它们替换为实际的变量值。使用参数化查询可以有效地防止 SQL 注入攻击,因为它不会将用户输入作为 SQL 语句的一部分。
此外,还可以使用转义函数对用户输入进行处理,以防止 SQL 注入攻击。在 PHP 中,可以使用 mysqli_real_escape_string 函数来转义用户输入。例如:
===================
$username = mysqli_real_escape_string($db, $username);
===================
这样,就可以将用户输入中的特殊字符转义,以防止 SQL 注入攻击。
php防止sql注入以及xss跨站脚本攻击1.post数据
封装转义函数 防sql注入 eag:addslashes($username);addslashes($password);
eag:防止sql注入函数封装
function deepslashes($data){
#判断$data的表现形式 并且需要处理空的情况
if(empty($data)){
return($data);
}
#高级简写 return is_array($data) ? array_map('deepslashes',$data) : addslashes($data);
#初级写法
if(is_array($data)){
#递归循环遍历处理多维数组
foreach ($data as $v) {
return deepslashes($v);
}
}else{
#单一变量
return addslashes($data);
}
#初级写法
}
2.get数据
指url 传参数导致sql发生改变
解决方案
①强制转换,使用函数intval 或者 数据类型 的关键字int
②隐式转换,通过运算,只需要+0即可
3.xss跨站脚本攻击
指恶意攻击向web页面插入html、js标签导致页面出现错误
解决方案
转义标签'<' '>'即可,有以下php函数可解决
htmlspecialchars 函数 和 htmlentites函数
eag:
function deepslashes($data){
#判断$data的表现形式 并且需要处理空的情况
if(empty($data)){
return($data);
}
return is_array($data) ? array_map('deepslashes',$data) : htmlspecialchars ($data);
}
php如何防止sql注入?额,这是我老师给的答案\x0d\x0a \x0d\x0a答:过滤一些常见的数据库操作关键字,\x0d\x0a select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤\x0d\x0aphp配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值\x0d\x0asql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号\x0d\x0a提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中\x0d\x0a对于常的方法加以封装,避免直接暴漏SQL语句\x0d\x0a开启PHP安全模式safe_mode=on\x0d\x0a打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"\x0d\x0a控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志\x0d\x0a使用MYSQLI或PDO预处理
关于防sql注入函数PHP的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于防sql注入函数PHP phpsql防注入代码的详细内容...