[翻译]PHP安全小建议(上)

  近日比较关注PHP的安全问题,国内的许多开发者,特别是PHP初学者,很多时候仅满足功能是否实现,对安全的探讨浅尝辄止甚至漠不关心。这样的后果很严重,比如泛滥的SQL注入,甚至还有直接被下载数据库连接文件的……此文译自Cal Evans发表DevZone的系列专题:PHP Security Tip (安全建议/小窍门) 虽然不是最新文章,但提到的许多原则性的东西和经典的做法仍然是值得重视的,绝对是值得一读的好文章,借此抛砖引玉,希望能给大家一点帮助,建立良好的安全意识,了解必要的防范措施。 文中加入本人的理解和注释的地方已经注明,首次翻译,不当之处欢迎指出。谢谢

  ,原书共21个建议,这是翻译的上部。

  PHP Security Tip #1

  Cal Evans (editor) 2 comments Thursday, March 1, 2007

  Looking for the security silver bullet? I’ve got bad news for you, there isn’t one. Security take an ongoing effort and a lot of little things instead of one big one. This month we are kicking off a new feature on DevZone, “Security Tip of the Week”. To kick this off right we will post one a day during March. Some of these tips will be specific things you can do, some will be general concepts you need to be aware of, all of them will be brief. So without further comment, here’s the first “Security Tip of the Week”.

  Comment

  MAILING LIST

  1:17PM UTC · Rob [unregistered]

  It can often be a good idea to join the relevant mailing list. You can find the announcement list for new releases of PHP below.

  http://www.php.net/mailing-lists.php

  ------------------------------------------------------------------------------

  PHP安全小建议1

  如果你在寻找安全方面的银弹(在西方基督教的传说中,只有银弹击中心脏,才可以杀死恶魔(吸血鬼? 狼人)。在Fred Brooks关于软件工程的著名书籍《人月神话里》和《没有银弹》中,把规模越来越大的软件开发项目比作无法控制的怪物,即希望有一样技术,能够像银弹彻底杀死恶魔那样,彻底解决这个问题。译者注),我有一个坏消息要告诉你,没有银弹。安全问题需要持续不断的努力和大量琐碎的工作而不是作为单一的大问题来解决,这个月我们将在DevZone开始一个新的专题,"一周安全小建议", 作为开始,在三月期间,我们将每天发布一个建议。有些建议将是一些你可以动手做的具体的事情,另一些则是你需要注意的一般概念,所有的建议都很简短,好了,闲话少说,下面开始我们第一个"一周安全小建议"。

  评论:

  邮件列表

  参与相关的邮件列表是一个好主意,你可以在下列地址找到最新的PHP发布新闻的公告列表!

  http://www.php.net/mailing-lists.php

  ------------------------------------------------------------------------------

  PHP Security Tip #2

  Cal Evans (editor) 3 comments Friday, March 2, 2007

  Security by obscurity is no security at all. On the other hand you don't want to give away information about your site either. Today's tip is a simple one but one that is often overlooked in production environments.

  Make sure you do not display errors and potentially leak information about your site.

  Simply setting display_errors = Off in your php.ini of your production server will prevent you from leaking information that may give intruders hints to the structure of your system. By default, display_errors = On.

  You can find more information and error reporting options in the manual's Error Handling and Logging Functions Introduction section.

  ------------------------------------------------------------------------------

  PHP安全建议#2

  使用隐藏信息来保证安全不能从根本上起到安全作用(Security by obscurity is no security at all.),但另一方面你也不想泄露你的站点信息。

  今天的建议很简单,但在生产环境下却经常被忽视。

  务必不要显示错误信息和站点的潜在泄密信息

  只要简单地在生产服务器的php.ini 设置display_errors = Off ,就可以防止泄露系统结构信息,让入侵者有机可乘。默认的设置是:display_errors = On.

  在手册的错误处理和日志函数介绍一节,你可以找到更多信息和错误报告选项。

  ------------------------------------------------------------------------------

  PHP Security Tip #3

  Cal Evans (editor) 1 comment Monday, March 5, 2007

  Being Security conscious is a good thing but that alone won’t solve the problem. Developers have to be vigilant when it comes to security. Even then you can’t do it alone. Today’s Security tip reminds you of this.

  Since your application may be harboring security vulnerabilities that you have not been exposed to, third-party security software or services should be considered to help bring a fresh perspective and find overlooked weaknesses.

  As a developer you should have tools in your toolbox that will help you find security vulnerabilities in your applications. Tools like Chorizo will help you by performing automated scans of your code. Programs like PHPSecInfo will help you ensure that your environment is configured properly.

  Using tools like these and other scanning tools should not be the only thing you do to ensure security. They are however, an important part of the mix. Let trusted projects and vendors help you build and maintain secure applications.

  ------------------------------------------------------------------------------

  PHP安全建议#3

  有安全意识是一件好事,但其本身不能解决问题,在安全问题上时开发者必须时刻保持警惕,尽管那样还是不足够的,今天的安全建议给你提 个醒:

  由于你的应用程序可能存在很多你未曾发现的安全隐患,使用第三方安全软件或服务可以帮助你对应用程序做一个清晰的透视,发现被忽视的不足之处。

  作为开发者,你的工具箱应该有能帮助检测应用程序安全隐患方面的工具。像Chorizo那样的工具, 它能自动扫描你的代码来发现问题,而像PHPSecInfo这样的程序可以确保环境的正确配置。

  为了安全的保证,仅仅是使用这些工具或者其他扫描工具还是不够的,然而它们是各种组合措施里很重要的一部分。值得依赖的项目和供应商将有助你建立和维护安全的应用程序。

  ------------------------------------------------------------------------------

  PHP Security Tip #4

  Cal Evans (editor) 7 comments Tuesday, March 6, 2007

  “Security through obscurity is no security at all.” so the adage goes. However, the flip side of that coin is, obscurity, when used as part of an overall strategy, is a good thing. There’s no sense in making things any easier for those with malicious intent. That brings us to our security tip for the day.

  Give files and folders with critical information non-default names.

  Don’t rely on obscure names to keep your application safe. You should always check permissions, test for vulnerabilities with testing tools and keep an eye on your log files for suspicious activity. When designing your applications and web sites though, don’t make it easy for bad people to do bad things. Don’t use default or common names for your files and directories.

  Do you have a security tip you would like to share? A nugget of security truth you have gleaned through research or life’s school of hard knocks? Log-in and click the contribute button in the upper right hand corner.

  ------------------------------------------------------------------------------

  PHP安全建议#4

  正如谚语所说," 使用隐藏信息来保证安全不能从根本上起到安全作用(Security through obscurity is no security at all.)",然而在另一方面,隐藏信息,作为安全整体战略的一部分却是一件好事,为那些怀有不轨之心的家伙把事情变得简单毫无意义,从这里引申出我们今天的安全小建议。

  不要企图依赖晦涩的命名来保持应用程序的安全,你应该经常检查权限,使用测试工具检查隐患,留心可疑活动的日志文件。尽管如此,在设计应用和网站时,也不要为有不轨之心的人做坏事提供简便的机会。文件或目录不要使用默认的或者通用的命名。

  你是不是也有想要分享的安全小建议呢? 通过研究得到的黄金信条,还是现实生活里碰钉子后的经验教训? 欢迎登录后点击右上角的贡献按钮和我们分享。

  ------------------------------------------------------------------------------

  PHP Security Tip #5

  Cal Evans (editor) 1 comment Wednesday, March 7, 2007

  PHP security is an ongoing mission requiring the programmer to think outside of the parameters of the application. It’s not enough these days to say in your mind “Does this do what I want it to do?” you also have to take into consideration “What else can people use it for and do I want to allow that?” Today’s Security tip is a proverb that all programmers should have to recite daily.

  Never trust the user.

  It’s a sad fact of life but users are evil. Users want nothing more than to find a way to exploit your application. As soon as you let your guard down and start thinking “I’m only selling small stuffed animals so how evil can my users really be?” you’ve lost the battle.

  Ok, maybe it’s not quite that dire but you do have to keep a wary eye on some of your users. That’s where the second proverb that all programmers should recite daily comes in.

  Filter Input, Escape Output

  Yes, FIEO (ok, it’s not as cool sounding as GIGO) is one of the mantras that all security minded programmers have live by.

  ------------------------------------------------------------------------------

  PHP安全建议#5

  PHP安全是一个持续的任务,它要求程序员思考应用程序参数外面的情况,现在,光是想着“它(应用程序)做了我想让它做的事吗?”你必须同时考虑到"人们还能用它来干什么和我允许他们这样做吗?"今天的安全建议是一个所有程序员必须每天背诵的格言:

  永远不要相信用户。(Never trust the user)

  用户是邪恶的,尽管就现实生活来说是很悲哀的事情,他们千方百计就为了破解你的应用程序,只要你掉以轻心然后这样想着:“我不过是兜售一点喂饱了的小动物而已(开发应用程序的一个比喻,译者注),我的用户真的能这么邪恶?”,那么你已经输掉了这声战斗。

  好吧,也许事情还没这么恐怖的地步,但你仍然需要对一部分用户保持警惕之心。第二个所有程序员必须每天背诵的格言出现了

  过滤输入,编码输出(Filter Input, Escape Output)

  是的,FIFO(好吧,它的发音不像GIGO那么酷) ,它却是所有具有安全意识的程序员赖以生存的魔咒之一。

  ------------------------------------------------------------------------------

  PHP Security Tip #6

  Cal Evans (editor) 5 comments Thursday, March 8, 2007

  The topic of writing secure applications in PHP covers more than just writing good PHP code. Most applications make use of a database of some kind. Many times, vulnerabilities that affect the entire application, are introduced when building the SQL code. Today's Tip of the Day deals with one easy solution developers can implement.

  When dealing with numbers in a SQL query, always cast.

  Even if you are filtering your input, a good and easy to implement safety measure is to cast all numeric values in the SQL statement. Take for example the following code.

  $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT);

  $sql = 'SELECT * FROM table WHERE id = '.$myId;

  Even though you are applying the native PHP filters built into PHP 5.2, there is something additional you can do. Try this instead.

  $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT );

  $sql = 'SELECT * FROM table WHERE id = '.(int)$myId;

  This final cast of the variable to an int removes any doubt about what will be passed to MySQL. The example above is purposefully simplified. In real-life situations, the code would be more complex and the chance for error much greater. By applying the final cast to in building the select statement, you are adding one more level of safety into your application.

  ------------------------------------------------------------------------------

  PHP安全建议#6

  编写安全的PHP应用程序的话题远不止编写良好的PHP代码,大部分的应用都会这样或那样地用到数据库,很多时候,在建立SQL代码的过程中,影响整个应用的安全隐患也钻了进来。

  在SQL查询中处理数字时,务必进行投射(cast)

  即使在过滤输入,一个简单而好用的安全措施是在SQL语句中投射所有的数字类型值。如下列代码所示

  $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT);

  $sql = 'SELECT * FROM table WHERE id = '.$myId;

  即便你使用PHP5.2内置的原生PHP过滤器(请参考最新PHP手册【某些旧的中文版本的PHP手册没有这个章节】Data Filtering一节,译者注),你还可以做一些其他的事情。试试换成下面的语句:

  $myId = filter_var($_GET['id'],FILTER_VALIDATE_INT );

  $sql = 'SELECT * FROM table WHERE id = '.(int)$myId;

  最终模型(final cast)里变量被投射成了整型(int) ,移除了全部到底向Mysql传递了什么的疑惑,以上例子有意地进行了简化,在现实情况下,代码会更复杂,出错的机会也会更多,依赖最终模型来建立select语句,你的代码多了一级安全保护。

  

时间: 2024-08-03 19:29:29

[翻译]PHP安全小建议(上)的相关文章

让你坚持写博客的4个小建议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 大部分写博客的人都要花时间在工作或者学习上,更不用说其他人际交往活动(例如:朋友或者家人)平衡这一切都是很棘手的事情.如果你不计划好这一切,首先要遭殃的恐怕是你的博客.当事情变得糟糕,无暇自顾的时候,大都数人只能放弃他们的博客. 放弃博客是一种错误,博客是个人很好的营销工具.他能提高你的写作技巧,扩展你的人际网络,一些你想法的追随者,使你在你

小建议:让您的网站在谷歌浏览器里更出色

中介交易 SEO诊断 淘宝客 云主机 技术大厅 自从去年9月谷歌浏览器发布以来,很多网站管理员和开发者纷纷向我们询问如何使自己的网站与谷歌浏览器更兼容.谷歌浏览器团队把这些问题作为很重要的借鉴和参考,这里我想向您提供一些小建议,让您的网站在谷歌浏览器里看起来更出色. 识别谷歌浏览器 大部分网站在Safari和谷歌浏览器的运行状况是一致的,因为它们都是基于Webkit的浏览器.如果您的网站在Safari里看起来正常,那么一般情况在在谷歌浏览器里也能正常浏览. 谷歌浏览器推出的时间还不长,许多网站会

根据搜索引擎规则给新朋友们一些小建议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 相信看到这篇文章的一些朋友,你们都是想让自己的网站有一个更好的提升,我想告诉各位的是,我这篇文章不仅是软文,而且还是一个可供参考,非常有价值的学习资料,我写这文章是根据我这几年的总结,给大家的一些小提示,希望朋友们少走弯路,今天我来告诉大家几个对SEO非常有用的方法. 1.域名:这一点是老生常谈的东西,这一点的确也是很重要的,很多朋友都晓得域

网络黑手泛滥 五个小建议让长辈也能安全上网

[TechWeb报道]现在网络骗局越来越多,对互联网不太熟悉的老年人是重灾人群,小编的一位年长亲戚就是被骗子盗取了 网上银行密码而损失了当天的买菜钱,虽然金额不多但也让人气愤.雅虎网站就列出了几个基本的小建议让老年人保护好个人信息.你也可以分享给你的长辈看看喔.以下是全文内容:当说到网络身份盗窃时,老年人往往受害甚多.他们很容易受骗,而且往往不知道最新的网络骗局.他们也不像年轻人熟悉互联网,所以骗子们很容易盗取他们的个人信息.以下五个小建议可以帮助老年人避开一些网络陷阱,让他们保护好自己的个人信

产品发布时的8个公关小建议

编者按:本文由创业公司PressDoc的创始人Marc Kohlbrugge撰写,他在文中分享了他发布产品时的8个公关建议,以下为正文部分: 经过好几个月甚至几年的努力后,你的产品终于出来了,所以一定要抓好机会给它"一炮打响",而要想取得这样的好效果在发布的时候就非常有必要做好公关行动了.以下为8个小建议: 1.培养一批追随者 正式发布之前,务必保证你的产品已经有了一部分用户,这样当你一发布,他们就会对你的产品口碑相传.要实现这样的目的,你有许多方法,比如说提前推出测试版本,写博客(为

针对微信营销存在问题的三个小建议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 之前和大家分享了<说说现在微信营销存在哪些问题> ,主要谈了下自己对于现在微信营销存在的一些问题的总结,本文笔者就对上一篇文章当中说到的那些问题,提出自己的三个小建议! 1.加强微信平台的建设 在进行微信平台建设时,应要注意以下几个问题:一是移动支付的问题.腾讯之前提出会在完善微信财付通的即时支付功能.但只采用财付通也是无法满足用

浅谈地方旅行社在建站与优化旅游网站的六点小建议

中介交易 SEO诊断 淘宝客 云主机 技术大厅 随着季节的快速变化,旅游的旺季也随之而来,很多游客们都希望在这个夏季去各大旅游景点旅游,尤其是一些比较出门的旅游城市,而对于游客们来说,很多人想直接通过互联网的方式去寻找旅行社并完成跟团等一系列流程,可能这种方式是让游客们看起来更简单更快捷.目前,地方性的旅游网站已经是满天飞甚至是前篇一律的出现在搜索引擎上,或许这样的好处可以让游客们多一种旅游景点选择或旅行社的选择. 近期笔者一直在负责贵州的地方旅游网站优化工作,在优化的过程中也总结了不少细节性的

浅析:seo网站设计制作几点小建议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站是一个企业的互联网形象窗口,很多人因此很关注网站的页面设计,笔者碰到多很多老板对网站的要求就是"高大上",我不知道在他们眼中"高大上" 究竟是个什么标准(有人说是完美),但是我认为网站的设计制作更重要的是实用.美观以及良好的用户体验.下文主要介绍了本人自己对对seo网站设计制作的 几点小建议,仅供参

win8任务栏小旗子上有红叉怎么办

win8任务栏小旗子上有红叉怎么办   解决方法 1.接着在登录的Win8系统上,使用组合键Win+X键调出控制面板; 2.在调出的控制面板窗口上,选择"大图标"为查看方式,再点击"操作中心"; 3.然后在打开的"操作中心"窗口上,点击"更改操作中心设置"; 4.在Win8系统更改操作中心窗口上,将相关提示关闭,再点击确定按钮保存.