PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP基础 >> 基础文章 >> 

编写安全 PHP 应用程序的七个习惯

编写安全 PHP 应用程序的七个习惯

来源:phpchina.com  作者:  发布时间:2008-12-14
PHP 应用程序中的安全性包括远程安全性和本地安全性。本文将揭

针对 CSRF 进行保护


跨站点请求伪造(CSRF 攻击)是利用用户权限执行攻击的结果。在 CSRF 攻击中,您的用户可以轻易地成为预料不到的帮凶。清单 17 提供了执行特定操作的页面示例。此页面将从 cookie 中查找用户登录信息。只要 cookie 有效,Web 页面就会处理请求。


清单 17. CSRF 示例
<img src="http://www.example.com/processSomething?id=123456789" />


CSRF 攻击通常是以<img>标记的形式出现的,因为浏览器将在不知情的情况下调用该 URL 以获得图像。但是,图像来源可以是根据传入参数进行处理的同一个站点中的页面 URL。当此<img>标记与 XSS 攻击结合在一起时 — 在已归档的攻击中最常见 — 用户可以在不知情的情况下轻松地对其凭证执行一些操作 — 因此是伪造的。

为了保护您免受 CSRF 攻击,需要使用在检验表单 post 时使用的一次性标记方法。此外,使用显式的$_POST变量而非$_REQUEST。清单 18 演示了处理相同 Web 页面的糟糕示例 — 无论是通过GET请求调用页面还是通过把表单发布到页面中。


清单 18. 从$_REQUEST中获得数据

以下为引用的内容:
<html>
<head>
<title>Processes both posts AND gets</title>
</head>
<body>
<?php
if ($_REQUEST['submit'] == 'Save') {
echo("<p>I am processing your text: ");
echo(htmlentities($_REQUEST['text']));
echo("</p>");
}
?>
</body>
</html>

清单 19 显示了只使用表单POST的干净页面。


清单 19. 仅从$_POST中获得数据

以下为引用的内容:
<html>
<head>
<title>Processes both posts AND gets</title>
</head>
<body>
<?php
if ($_POST['submit'] == 'Save') {
echo("<p>I am processing your text: ");
echo(htmlentities($_POST['text']));
echo("</p>");
}
?>
</body>
</html>

结束语
        从这七个习惯开始尝试编写更安全的 PHP Web 应用程序,可以帮助您避免成为恶意攻击的受害者。和许多其他习惯一样,这些习惯最开始可能很难适应,但是随着时间的推移遵循这些习惯会变得越来越自然。

        记住第一个习惯是关键:验证输入。在确保输入不包括无效值之后,可以继续保护文件系统、数据库和会话。最后,确保 PHP 代码可以抵抗 XSS 攻击、表单欺骗和 CSRF 攻击。形成这些习惯后可以帮助您抵御一些简单的攻击。

 


关于作者

        Nathan Good 居住在明尼苏达州的双子城。其专职工作是软件开发、软件架构和系统管理。在不编写软件时,他喜欢组装 PC 和服务器、阅读和撰写技术文章,鼓励他的所有朋友转用开源软件。他自己编著以及与他人合著了很多书籍和文章,包括 Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution Approach 和 Foundations of PEAR: Rapid PHP Development。

最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号