(转)PHP开发安全建议TOP20

2008-03-13 – 2:27 am

7.当你使用session_regenerate_id()来阻止session固定的时候,最好是将之前的session ID移除

实例脚本:

<?php

session_start();

$_SESSION[’data’] = time();

session_regenerate_id();

?>

检测URL以及/tmp路径

sess_82c6980017e100277a63983142fd454c

sess_a4bab88e6dfa6e900ade21e3fbd27a53

再次检测

sess_984c5230acca90b5a75eddb89bb48354

sess_a4bab88e6dfa6e900ade21e3fbd27a53

sess_82c6980017e100277a63983142fd454c

然后你可以看到如下情况

sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c
sess_dd88c05b724d80b30c90309847f2e919

这些session仍然很活跃。当重新生成ID的时候移除它们采用如下代码:

<?php

session_start();

$_SESSION[’data’] = time();

session_regenerate_id(true);

?>

如果你正在使用自己的session处理器的话,这可能导致你的destroy callback功能被激活。

8.使用php安全主题,实际上不止一种方法可以完成任务。在很多情况下,战术的重组可以达到最好的安全效果。我们一直在谈论信息的过滤,我们还需要警惕来自于用户的验证信息。这是在日常的php应用中需要加以注意的。

确认用户的输入信息

代码实例:

<?php$myFile = filter_var($_GET[’file’], FILTER_SANITIZE_STRING);

include($myFile);

?>

点击http://example.com/file.php?file=home.php可能会导致你的脚本包含在你的目前的目录中的文件 home.php。但是如果有人请求http://example.com/file.php?file=badcode.php的话,你就会置身于执行 代码的危险中,或是你不想执行的代码被执行。

不要仅仅依靠file_exists(). 因为本地文件并不意味着这是一个正确的文件甚至那根本就不是你的文件。不要让黑客轻易的执行代码。

为了保证安全,记住一定要过滤和确认:

<?php
// filter
$myFile = filter_var($_GET[’file’], FILTER_SANITIZE_STRING);
// Then validate
$valid = array(’home.php’, ‘about.php’);
If (!in_array($myFile, $valid)) {
die(’Leave, evil hacker’);
}
include($myFile);?>

9.有时最简单的也就是最安全的。以下的建议很简单,但是我们很惊讶在现实生活中很少有人理解以及使用。

不要将敏感信息放于网上

思考一下下面这个目录结构:

/htdocs
/includes
/images
/js

如果你将你的数据库的信任状存储于一个名为db.inc的文件中,然后将其放于这一目录之下,很可能就有人下载这一文件夹名下的信息,只要他们访问http://example.com/includes/db.inc.站点,因为绝大多数的网站服务器并不知道如何处理这一.inc文件,如果有访问请求的话,它们直接被认为是纯文本。后果是可怕的。如果你存储信任状的文件使用的是非.php后缀名的话并且位于你的网络服务器的根目录之下,很可能你的信息正在泄露。

解决方法很简单。将所有的敏感信息置于网络服务器的根目录之外。现在也有很多专家提倡把绝大多数的php代码放于网络服务器根目录之外。因为php代码不限于同一个限制,你可以在根目录的同一文件层次之下建立一个目录,然后将你的所有的机密信息和代码放在那。

/phpinc
/includes
/htdocs
/images
/js

Popularity: 25% [?]

Pages: 1 2 3 4

Leave a Reply

You must be logged in to post a comment.