确保PHP安全的四条安全规则
有关PHP
安全的几条规则
规则 1:绝不要信任外部数据或输入
关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP
代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或
cookie)的任何数据都是不可信任的
例如,下面的数据元素可以被认为是安全的,因为它们是在 PHP
中设置的。
清单 1. 安全无暇的代码
以下为引用的内容:
<?php
$myUsername = ‘tmyer’;
$arrayUsers =
array(’tmyer’, ‘tom’, ‘tommy’);
define(”GREETING”, ‘hello there’ .
$myUsername);
?>
但是,下面的数据元素都是有瑕疵的。
清单 2. 不安全、有瑕疵的代码
以下为引用的内容:
<?php
$myUsername = $_POST['username'];
//tainted!
$arrayUsers = array($myUsername, ‘tom’, ‘tommy’);
//tainted!
define(”GREETING”, ‘hello there’ . $myUsername);
//tainted!
?>
为 什么第一个变量 $myUsername 是有瑕疵的?因为它直接来自表单
POST。用户可以在这个输入域中输入任何字符串,包括用来清除文件或运行以前上传的文件的恶意命令。您可能会问,“难道不能使用只接受字母 A-Z
的客户端(Javascrīpt)表单检验脚本来避免这种危险吗?”是的,这总是一个有好处的步骤,但是正如在后面会看到的,任何人都可以将任何表单下载
到自己的机器上,修改它,然后重新提交他们需要的任何内容。
解决方案很简单:必须对 $_POST['username'] 运行清理代码。如果不这么做,那么在使用 $myUsername
的任何其他时候(比如在数组或常量中),就可能污染这些对象。
对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。在这个示例中,只希望接受字母。将字符串限制为特定数量的字符,或者要求所有字母都是小写的,这可能也是个好主意。
清单 3. 使用户输入变得安全 www~phperz~com
以下为引用的内容:
<?php
$myUsername = cleanInput($_POST['username']);
//clean!
$arrayUsers = array($myUsername, ‘tom’, ‘tommy’);
//clean!
define(”GREETING”, ‘hello there’ .
相关文档:
一个简单的例子读取CSV文件:
<?php
$handle=fopen("test.csv","r");
echo "<table border=2>";
//配合while循环读取文件
while($data=fgetcsv($handle,1024))
{
list($user,$pwd,$partment,$title)=$data;
echo "<tr>
<td>$user</td>
<td>$pwd< ......
优秀的PHP代码应该是结构化的。大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便日后清楚它们的用途。
而且应该尽可能地把前台代码如HTML、CSS、Javascript等从程序中分离出来。PHP的面向对象编程特性可以很好地帮助程序员将代码整理有
序。
&n ......
如何在PHP下载文件名中解决乱码
CND8学院
PHP教程
发布日期:2009年05月23日
通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载,相信这个大家都会。那么用Content-Disposition设置下载的文件名,这个也有不少人知道吧。基本上,下载程序都是这么写的:
< ......
本篇文章转载网络,转载地址:http://blog.s135.com/read.php?366
Nginx
("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式 ......