首页 > 编程 > PHP > 正文

PHP安全编码规范之安全配置篇

2020-03-22 19:14:16
字体:
来源:转载
供稿:网友
  • 因为配置不当引发的安全问题是屡见不鲜的,通过一系列的安全配置,可以很好的解决一些安全隐患,从而为系统增加安全系数。但是在开发过程中,因为需求的改变和编程的习惯可能会更改一些配置同时带来安全隐患。在这种情况下,需要更加的了解配置带来的安全隐患,也就是漏洞的产生原理。同时需要了解在打开一些配置安全隐患之后,该如何通过一些其他手段解决安全问题是我们重点需要讨论的问题。

    0×01注册html' target='_blank'>全局变量带来的安全隐患

    register_globals这个是开启全局注册变量功能,为On是开启,Off是关闭。在开启后带来的安全隐患是巨大的,所以建议关闭。如果在需求上需要开启,在02里会有具体介绍该如何防御。

    配置规范:register_globals要设置为off,在php4.2.0后默认为off,如果为on,需要为每个变量初始化

    功能描述:get,post,cookie等变量直接被注册为全局变量,比如表单的username,程序中使用$username就能获取到值,不需$_POST来获取值

    安全隐患样例:

    1-1

    这里如果没有通过cooke认证,那$authorized将一直为假,就无法被认证,但是如果register_globals为on,那么我们在url里可以修改get参数让$authorized注册为全局变量,并修改它的值为真,比如http://xxx/test.php?authorized=1,这样就绕过了认证。

    0×02初始化变量和配置预警提高安全系数

    如果有需求要开启注册全局变量,那我们该如何防御呢?这里我们介绍两个办法,一个是初始化变量,和配置最高预警信息,下面让我们看看具体如何操作。在这里我们初始化了$authorized的值为假,即使传入了真也不会改变

    比如:

    1-2

    所以我们只要初始化$authorized的值,就不会出现绕过的问题,但是有的时候会忘记初始化变量,没关系,可以配置预警模式,如果有未初始化的,就会预警,可以在php.ini中设置 error_reporting 设置为 E_ALL|E_STRICT最高级别,这样如果哪个变量未初始化,报错就会预警。

    0×03 配置不显示错误信息,保存错误信息到本地

    黑客在渗透过程中,因为错误信息的暴露,给黑客提供了很大的利用便利条件,所以在开发过程中,我们可以为了编程的方便,需要开启错误信息提示到浏览器,但是在程序上线后,我们一定要关闭错误信息提示,这里提供一种一举两得的方式,关闭浏览器显示错误提示,记录错误提示到本地日志中。这些设置可以在php.ini中设置,也可以在php程序中设置。

    1-3

    0×04 权限问题-能不给的权限不要给

    关于权限问题始终是一个容易被忽略的问题,程序员往往在乎程序功能上是否实现了,的确容易在功能上过大的给予一些权限照成一些安全隐患。比如我们在上传过程中,可能只需要写权限和执行权限,但是我们又多给了个读权限。即便我们做了过滤,即便我们做了混淆,但是安全不是绝对的,一个环节的疏忽就容易照成不可挽回的损失。下面让我们看一个案例

    案例分析:

    1-4

    这是一个上传功能,这里的功能需求只需要写权限和执行权限,可以看到,只用了getimagesize做了图片认证,这里只需要改下文件类型就可以简单绕过上传一个php的木马,但是同时对上传的文件名重新命名成了随机名,所以攻击者不知道源码很难逆向文件名来解析php木马。

    但是我们又多给了读取权限,会有什么样的安全隐患呢?比如这个程序里有这样一个功能

    1-5

    这里是一个ping的功能,即使做了一些过滤,但是因为过滤不全,没有过滤&,{,}等符号,

    1-6

    可以这样绕过从这张图片可以看到,我们本来不需要读权限,但是因为给了读权限,让攻击者在这里可以读到文件名甚至其他一些操作,从这两点的结合,攻击者可以很轻易获取到程序的权限从而带来很严重的信息泄露等问题。所以回到我们讨论的问题,最小权限问题,这里在需求上完全不需要读权限,但是因为读权限的开启,照成了严重的损失,所以,能不给的权限不要给,给过的权限,一定要做好过滤等防御措施。

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表