PHP开发中常见的安全问题详解和解决方法(如S

浅谈Php安全和防Sql注入,防止Xss攻击,防盗链,防CSRF

前言:

首先,笔者不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记、细心总结文章,里面有些是我们phper不易发现或者说不重视的东西。所以笔者写下来方便以后查阅。在大公司肯定有专门的web安全测试员,安全方面不是phper考虑的范围。但是作为一个phper对于安全知识是:“知道有这么一回事,编程时自然有所注意”。

目录:

1、php一些安全配置
(1)关闭php提示错误功能
(2)关闭一些“坏功能”
(3)严格配置文件权限。
2、严格的数据验证,你的用户不全是“好”人
2.1为了确保程序的安全性,健壮性,数据验证应该包括内容。
2.2程序员容易漏掉point或者说需要注意的事项
3、防注入
   3.1简单判断是否有注入漏洞以及原理
   3.2常见的mysql注入语句
       (1)不用用户名和密码
       (2)在不输入密码的情况下,利用某用户
       (3)猜解某用户密码
(4)插入数据时提权
(5)更新提权和插入提权同理
(6)恶意更新和删除
(7)union、join等
(8)通配符号%、_
(9)还有很多猜测表信息的注入sql
   33防注入的一些方法
       2.3.1 php可用于防注入的一些函数和注意事项。
       2.3.2防注入字符优先级。
2.3.3防注入代码
    (1)参数是数字直接用intval()函数
    (2)对于非文本参数的过滤
(3)文本数据防注入代码。
(4)当然还有其他与addslashes、mysql_escape_string结合的代码。
4、防止xss攻击
4.1Xss攻击过程
4.2常见xss攻击地方
4.3防XSS方法
5、CSRF
5.1简单说明CSRF原理
5.2防范方法
6、防盗链
7、防拒CC攻击

1、php一些安全配置


(1)关闭php提示错误功能

在php.ini 中把display_errors改成

复制代码 代码如下:

display_errors = OFF


或在php文件前加入

复制代码 代码如下:

error_reporting(0)

1)使用error_reporting(0);失败的例子:

A文件代码:

复制代码 代码如下:

<? 
error_reporting(0); 
echo 555 
echo 444; 
?>


错误:

复制代码 代码如下:

Parse error: parse error, expecting `','' or `';'' in E:\webphp\2.php on line 4


2)使用error_reporting(0);成功的例子:
a文件代码:

复制代码 代码如下:


<?php 
error_reporting(0); 
include("b.php"); 
?>


b文件代码:

复制代码 代码如下:


<?php 
echo 555 
echo 444; 
?>


这是很多phper说用error_reporting(0)不起作用。第一个例子A.php里面有致命错误,导致不能执行,不能执行服务器则不知有这个功能,所以一样报错。

第二个例子中a.php成功执行,那么服务器知道有抑制错误功能,所以就算b.php有错误也抑制了。

ps:抑制不了mysql错误。

(2)关闭一些“坏功能”

1)关闭magic quotes功能

在php.ini 把magic_quotes_gpc = OFF
避免和addslashes等重复转义

2)关闭register_globals = Off

在php.ini 把register_globals = OFF

在register_globals = ON的情况下

地址栏目:https://www.jb51.net?bloger=benwin

复制代码 代码如下:


<?php 
//$bloger = $_GET['bloger']   //因为register_globals = ON 所以这步不用了直接可以用$bloger
  echo $bloger; 
?>

这种情况下会导致一些未初始化的变量很容易被修改,这也许是致命的。所以把register_globals = OFF关掉

(3)严格配置文件权限。

为相应文件夹分配权限,比如包含上传图片的文件不能有执行权限,只能读取

2、严格的数据验证,你的用户不全是“好”人。

记得笔者和一个朋友在讨论数据验证的时候,他说了一句话:你不要把你用户个个都想得那么坏!但笔者想说的这个问题不该出现在我们开发情景中,我们要做的是严格验证控制数据流,哪怕10000万用户中有一个是坏用户也足以致命,再说好的用户也有时在数据input框无意输入中文的时,他已经不经意变“坏”了。

2.1为了确保程序的安全性,健壮性,数据验证应该包括

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9b60f9a26cc0359ef55395098f85bfd1.html