亚森罗宾 -- 悟透人生

人生在世 虚幻无数 悟透人生 洒脱于世 -- 亚森罗宾

歪酷博客
· 所有网志 · 技术天地 · 摄影小记 · 新闻学手记 · 随谈随笔 · 未分类 ·
订阅博客
订阅我的博客
订阅到Google
订阅到抓虾
订阅到鲜果
日历
最新的评论
· 07/01 说了等于没说...
· 05/16 [:Cry:]
站内搜索
友情链接
· 歪酷博客
· 管理我的Blog
· 亚森罗宾的豆瓣
· 亚森罗宾在巴巴变的相册
· Google 黑板报
· 谷奥——探寻谷歌的奥秘
· Daniel 我远在澳洲的兄弟
· 一个当警察的大学同学
· TTST
· xixi
· smokingcat
· Litrin
· David
· 仙姑
· stanley
· wendy
· 蔷薇岛屿
· 朵朵缤纷
· 小鸡安息
· myard
· 小昳
· SadieaLupin
博客推广
第三届 D2 前端技术论坛 (上海)

订阅 RSS

0060301

歪酷博客

亚森罗宾 @ 2009-06-09 15:17

隐藏配置细节
许多程序员倾向于部署开源软件,以此作为对外显摆的一个招牌。不过,关于项目发布的每一项信息都可能为攻击者提供一些重要线索,最终可以用来侵入到你的服务器,意识到这一点很重要。也就是说,要考虑一种替代的方法,让应用程序既发挥能力又尽可能地隐藏技术细节。尽管隐藏只是整个安全领域的一部分,但这确实是始终要牢记的一种策略。

隐藏Apache
Apache在所有文档请求和服务器生成的文档(例如500内部服务器错误文档)中都会输出一个服务器签名。有两个配置指令负责控制此签名:ServerSignature和ServerTokens。
1. Apache的ServerSignature指令 ServerSignature指令负责插入与Apache的服务器版本、服务器名(通过ServerName指令设置)、端口和编译模块有关的一行输出。启用这个指令时,如果与ServerTokens
Apache/2.0.59(Unix) DAV/2 PHP/6.0.0-dev Server at www.example.com Port 80
很明显,这样的信息是你想自己保留的项。因此,可以考虑将这个指令设置为指令(下面将会介绍)一起使用,就能够显示类似于下面的输出:Off来禁用。
 尽管ServerSignature禁用时该指令是没有意义的,但ServerSignature由于某种原因必须被启用时,可以考虑将该指令设置为Prod。
 

2. Apache的ServerTokens指令 ServerTokens指令确定在启用ServerSignature指令时,以何种程度提供服务器细节。有6个可用选项,包括:Full、Major、Minimal、Minor、OS和Prod。表1中给出了每个选项的一个示例。

表1 ServerTokens指令的选项
选项 示例
Full Apache/2.0.59 (UNIX) DAV/2 PHP/6.0.0-dev
Major Apache/2
Minimal Apache/2.0.59
Minor Apache/2.0
OS Apache/2.0.59 (UNIX)
Prod Apache

隐藏PHP
还可以把你在使用PHP来驱动网站的这一事实隐藏起来,或者至少不那么明显。使用expose_php指令就能避免将PHP版本信息追加到Web服务器签名的最后。不允许访问phpinfo() 可以防止攻击者得到你的软件版本号和其他重要信息。通过改变文档扩展名,使得这些页面映射到PHP脚本不容易被看出来。
1.expose_php = On | Off 作用域:PHP_INI_SYSTEM;默认值:On。
启用时,PHP指令expose_php将细节追加到服务器签名后面。例如,如果启用了ServerSignature,ServerTokens设置为Full,并且启用了此指令,服务器签名的有关部分如下:
Apache/2.0.44(Unix) DAV/2 PHP/5.0.0b3-dev Server at www.example.com Port 80
如果expose_php被禁用,则服务器签名如下所示:
Apache/2.0.44(Unix) DAV/2 Server at www.example.com Port 80



 
亚森罗宾 @ 2009-06-01 11:10

PHP中最后一行的分号“;”是可以不要的

PHP中的结尾标签“?>也是可以不要的,但这个时候最后一行的分号就不能省略


一般来说写代码还是要规范,但省略PHP中的结尾标签“?>”的确是有一些用处的

ZendFrameworkCoding Standard里有一段是这么写的:

For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it prevents the accidental injection of trailing whitespace into the response.


PHP的官方资料中才也有提到这个:

The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.




 
亚森罗宾 @ 2009-05-27 10:13

CodeIgniter 档案结构

  • Application应用程序
  • cache 第一次安装时为空,如果你打开缓存设置(详见第十章),该文件夹存放缓存数据
  • codeigniter 基本系统文件
  • database CI 的数据库类库文件
  • fonts没有在用户指南中介绍,存放水印图像使用的字体
  • helpers 系统级“辅助函数”
  • language 你可以存放你本国语言的键名列表
  • libraries系统级类库
  • logs 如果你需要系统记录错误,那么日志文件默认保存在这个文件夹中
  • plugins更多的系统级代码块
  • scaffolding 系统级类库,实现简单的“脚手架”功能

Application资料夹

CodeIgniterapplication目录将是开发应用程式时最常使用的一个。就让我们来更仔细的看application资料夹里面有些什么

config

配置文件:包含网站的基本配置信息

controllers

控制器

errors

包含出错信息页,你不必修改这个文件夹

helpers

“辅助函数”

hooks

首次安装时为空,用来存放你创建的“钩子”。钩子是用

来装载其它文件的控制方法。

language

你可以存放你本国语言的键名列表

libraries

代码库,针对本项目的专用代码

models

代码库,也是针对本项目的专用代码

views

要显示信息的模板


Active Record

Active Record”是一个“设计模式”,另一方面又是一个高度抽象的系统,就像MVC。它提供一个解决公共编程问题的模板,并且也有一些枯燥无味的书籍。它本身不是代码,只是一个代码的模式。对于Active Record,有一些不同的解释。它的核心是在你每次执行查询时,把你的数据库与一个对象建立一个对应关系。每一张数据库表是一个类,每一行是一个对象。所有你需要做的只是创建它、读取它、修改它或者删除它。




 
亚森罗宾 @ 2009-03-18 10:07

ZendServer install

/etc/yum.repos.d/zend.repo

yum install zend-pe

yum clean all

yum install php5-extra-extensions-zend-pe

Setup -> Firewall Configuration -> port 10081

Setup -> Firewall Configuration -> SELinux disabled

 

Zend Server path

Apache conf /etc/httpd/conf/httpd.conf

Document root /var/www/html

Apache bin /usr/local/zend/bin/apachectl

 

LightTPD conf /usr/local/zend/gui/lighttpd/etc/lighttpd.conf

Document root /usr/local/zend/gui/lighttpd/htdocs

LightTPD bin /usr/local/zend/bin/lighttpdctl.sh

 

php.ini /usr/local/zend/etc/php.ini

 

Pear conf /usr/local/zend/etc/pear.conf

Document root /usr/local/zend/share/pear

 

ZendFramework /usr/local/zend/share/ZendFramework

 

Zend Server upgrade

yum update “*zend*”

 

Zend Server uninstall

zendctl.sh stop

yum remove ’rpm –qa “*zend*” | xargs’

 

Zend Server change password

bin /usr/local/zend/bin/gui_passwd.sh

ini /usr/local/zend/gui/application/data/zwas.ini




 
亚森罗宾 @ 2009-02-19 14:18

2月5日,互联网违法和不良信息举报中心公布了全国整治互联网低俗之风第七批曝光网站名单,对10家存在大量低俗内容的网站进行曝光。几天来,一些网站积极开展清理和整治工作,但仍有部分网站整治不力。现将第七批被曝光网站整治情况通报如下:

一、清理整治工作较好的网站
1、“海内网”(所在地:北京)对“群组”栏目进行了全面的清理。
2、“北京宽带网”(所在地:北京)对“资讯”频道的“美图鉴赏”栏目进行了全面的清理。
3、“PPlive”(所在地:上海)关闭了“P吧”的“超炫美图”栏目。
4、“PPS网络电视”(所在地:上海)关闭了社区的“娱乐ppShow”版块。
5、“华体网”(所在地:上海)关闭了“花花体坛”频道。
6、“中国学生网”(所在地:广东)关闭了“动漫”频道。
7、“维客网”(所在地:江苏)关闭了“维客贴吧”栏目。

上述网站整改措施比较得力,予以表扬。

二、需要继续清理整治的网站
1、“IT世界网”(所在地:广东)对“游戏”频道的“动漫贴图”栏目进行了清理,但“游戏”频道的“游戏红颜阁”栏目仍存在大量低俗图片。
2、“歪酷博客”(所在地:上海)对“博客”栏目进行清理,但仍存在部分低俗内容。

上述网站应加大清理整治力度,采取更加有效的措施,对低俗内容进行全面清理。

三、清理整治工作不力的网站
“博客网”(所在地:北京)未对“图片博客”的“美女写真”栏目进行清理,同时在“群组”频道中可发现部分低俗内容。

举报中心对博客网进行强烈谴责,要求其对低俗内容进行彻底清理,如仍然整改不力,举报中心将建议相关执法部门进行处罚,希望广大网民继续予以监督。

中国互联网协会互联网违法和不良信息举报中心

2009年2月6日




 
亚森罗宾 @ 2009-02-10 21:20

Google Earth上的中央电视台新大楼和北配楼



 
亚森罗宾 @ 2008-12-15 15:37

最近在使用Smarty的smartTruncate插件截取字符串的过程中发生了乱码问题,字符串是“《复兴·成就》”。查看smartTruncate插件代码发现,原来是作者将ASCII大于127的,UTF-8字符都默认为3字节。我们都知道,一个UTF-8编码的汉字是占3字节的,包括一些中文的标点符号。但ASCII大于127的UTF-8编码的字符并不都是3字节。还有2字节,4字节的情况。字符串是“《复兴·成就》”中的“·”就只占2字节。
下面借网上的一些文章,就来谈一下
UTF-8编码问题:

UTF-8经常被用于文本文件和网络传输,因为不少这类场合还停留在ANSI时代,需要向纯ASCII兼容。UTF-8是UNICODE的一种变长字符编码 ,长度在1至6字节。这里注意一下,UTF-8曾经是6字节,现在是4字节, 两者都对。 但如果你看到介绍UTF-8的文章说是6字节,基本可以判断这是比较早的文章。在内容只是ASCII的0X00~0X7F时,UTF-8与ASCII或各种ANSI编码(如GB,JISKSC,ISO-8859-1)的ASCII部分完全兼容,也是用1字节的低7位表示。这就保证文本编辑器打开的UTF-8格式文档中,即使扩展字符无法显示,但ASCII部分肯定得以顺利解读。这点对于还需要假定是各种ANSI编码的场合非常有用,比如HTML,前面的纯ASCII部分一直到META标记,然后可以确定随后的编码,而此时UTF-16则不能正常工作。UTF-8采用如下所示的二进制方式来表示31位UCS-4,X表示有效位:
1字节 0XXXXXXX
2字节 110XXXXX 10XXXXXX
3字节 1110XXXX 10XXXXXX 10XXXXXX
4字节 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
5字节 111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX
6字节 1111110X 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX
从上可以看得出,如果处在第一字节的引导字节最高位为0,则是一字节。否则看前导1的个数,来确定是几个字节长。前导1与有效位之间有0相隔,也可以通过首字节的值范围来确定字节数。
1字节 0  ~127
2字节 192~223
3字节 224~239
4字节 240~247
5字节 248~251
6字节 252~253
随后的字节每个都以10为前导位,取值范围则在128~191之间。可以立即得知一个字节是否为后续字节,因为引导字节的引导位不是00、01就是11,不会是10。

Wikipedia上找到的UTF8的相关描述

binary hex decimal notes
00000000-01111111 00-7F 0-127 US-ASCII (single byte)
10000000-10111111 80-BF 128-191 Second, third, or fourth byte of a multi-byte sequence
11000000-11000001 C0-C1 192-193 Overlong encoding: start of a 2-byte sequence, but code point <= 127
11000010-11011111 C2-DF 194-223 Start of 2-byte sequence
11100000-11101111 E0-EF 224-239 Start of 3-byte sequence
11110000-11110100 F0-F4 240-244 Start of 4-byte sequence
11110101-11110111 F5-F7 245-247 Restricted by RFC 3629: start of 4-byte sequence for codepoint above 10FFFF
11111000-11111011 F8-FB 248-251 Restricted by RFC 3629: start of 5-byte sequence
11111100-11111101 FC-FD 252-253 Restricted by RFC 3629: start of 6-byte sequence
11111110-11111111 FE-FF 254-255 Invalid: not defined by original UTF-8 specification