php的一些安全性的操作

来源:互联网 发布:淘宝客佣金代扣款 编辑:程序博客网 时间:2024/05/16 11:36

程序的安全性越高,系统受到的保护程序才能越大。然而很多网站的安全漏洞是由于表单漏洞引起的。下面的是我们应该注意的几个地方

 

1: 在php读取文件的时候首先需要判断这个文件是否存在,存在的话打开。

      如果不加这个操作的话,用户可以这样攻击

     <?php

         $fp= fopen("/com/{$_GET['file']}","r");

     ?>

     程序的本意是打开路径com下的file文件,但是由于用户提交参数缺少充分的过滤,当输入一下的URL访问时:

     openfile.php?file=../../etc/passwd%00

     攻击者就可以利用它进行目录遍历攻击及获取一些敏感信息。想要拒绝这样的情况发生,可使用PHP提供的basename()函数来检测文件的路径,以避免危险的发生,下面的是使用basename()函数的代码:

 

<?php

 

$_GET['file'] = basename($_GET['file']);

if(file_exists("/com/{$_GET['file']}")){

$fp = fopen("/com/{$_GET['file']}");

}

?>

 

2: 表单的过期处理

有时候提交完一个表单的时候,因为出现了错误,此时点击浏览器上的“后退”按钮回到原先的表单的时候,发现所有字段的信息被清空了或者是出现网页过期的情况,

 

    现在出现了两种问题:一是避免表单过期。在PHP中,一种方式是使用hesder()函数来设置缓存控制,在程序上加上如下的代码:

hesder('Cache-control:private,must-revalidate');

   在上面的代码中,Cache-control 指定请求和响应的缓存机制,常用的缓存指令有 private,no-cache,max-age,must-revalidate等,在默认的情况下为private.下面看一下在不同的情况下他们的作用有何不同。

 

  • 在浏览器上后退时:当缓存指令为 private,max-age和must-revalidate时,不会重新访问服务器。当缓存指令为no-cache时,每次后退都会重新访问服务器。
  • 打开新窗口:当缓存指令为private,no-catche和must-revalidate时,打开新窗口将会重新访问服务器。当缓存指令为max-age时,在max-age指定的时间范围内不会重新访问服务器。
  • 在地址栏按“回车”键:当缓存指令为 private或must-revalidate时,按下“回车”只能第一次访问时才能访问服务器,以后不会访问。当缓存指令为 no-catche时,每次都会访问服务器。
  • 刷新页面:每次刷新页面时,无论缓存指令为何值时,都将重新访问服务器

 

在PHP中,另一种解决表单过期的方式是使用session_cache_limiter()函数,需要注意的是该函数要在session_start()函数之前执行。如:

session_cache_limiter('private,must-revalidate');

或者:

 

 

session_cache_limiter('nocache‘);

 

session_cache_limiter('private');

 

session_cache_limiter('public');

 

 

 

 

3;过滤表单的数据

 

此处掠过

 

 

 

 

原创粉丝点击