• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP防止sql注入-JS注入

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一:为了网站数据安全,所有和数据库操作的相关参数必须做相关过滤,防止注入引起的网站中毒和数据泄漏

1.PHP自带效验函数

  mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

  受影响的字符串:\x00、\n、\r、\、'、"、\x1a

==>攻击实例

 

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql);

// 不检查用户名和密码
// 可以是用户输入的任何内容,比如:
$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";


mysql_close($con);
?>

 

上面代码的结果是:SELECT * FROM users WHERE user='john' AND password='' OR ''=''。这就意味着不用密码可以自由登入系统。

==>简单的参数效验

 1 <?php
 2 function check_input($value)
 3 {
 4 // 去除斜杠
 5 if (get_magic_quotes_gpc())
 6   {
 7   $value = stripslashes($value);
 8   }
 9 // 如果不是数字则加引号
10 if (!is_numeric($value))
11   {
12   $value = "'" . mysql_real_escape_string($value) . "'";
13   }
14 return $value;
15 }
16 
17 $con = mysql_connect("localhost", "hello", "321");
18 if (!$con)
19   {
20   die('Could not connect: ' . mysql_error());
21   }
22 
23 // 进行安全的 SQL
24 $user = check_input($_POST['user']);
25 $pwd = check_input($_POST['pwd']);
26 $sql = "SELECT * FROM users WHERE
27 user=$user AND password=$pwd";
28 
29 mysql_query($sql);
30 
31 mysql_close($con);
32 ?>

 

==>防止js注入

例如:http://url?act="<script>XXXXXX</script>",要确保参数的正确性,我们需要过滤掉PHP标签

 1 <?php
 2 function check_input($value)
 3 {
 4 // 去除斜杠
 5 if (get_magic_quotes_gpc())
 6   {
 7   $value = stripslashes($value);
 8   }
 9 
10 //过滤掉html标签
11 $value = strip_tags($value);
12 
13 // 如果不是数字则加引号
14 if (!is_numeric($value))
15   {
16   $value = "'" . mysql_real_escape_string($value) . "'";
17   }
18 return $value;
19 }
20 
21 $con = mysql_connect("localhost", "hello", "321");
22 if (!$con)
23   {
24   die('Could not connect: ' . mysql_error());
25   }
26 
27 // 进行安全的 SQL
28 $user = check_input($_POST['user']);
29 $pwd = check_input($_POST['pwd']);
30 $sql = "SELECT * FROM users WHERE
31 user=$user AND password=$pwd";
32 
33 mysql_query($sql);
34 
35 mysql_close($con);
36 ?>

 

二:总结

  要完全防止sql注入,我们要从源头上做起,接收到的参数可以控制参数类型,对参数进行转义等等,转义常用的有如下几种

  A,用addslashes()函数转义。  
  B,用pdo对象的quote()方法:$pdo->quote($var);进行转义
  C,在执行sql语句用prepare() 。$pdo->prepare($sql),prepare()默认对变量进行转义的

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php7.3版本的环境配置发布时间:2022-07-10
下一篇:
PHP行为测试工具Codeception(介绍)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap