君心似兰草,秋水作文章

在这个光怪陆离的人间,没有谁可以将日子过得行云流水。但我始终相信,走过平湖烟雨,岁月山河,那些历尽劫数、尝遍百味的人,会更加生动而干净。时间永远是旁观者,所有的过程和结果,都需要我们自己承担。
——白落梅 《因为懂得所以慈悲:张爱玲的倾城往事》

台风 台风 灿鸿来了

最近接连三个台风在太平洋共舞之后,开始分头向广东、福建进军了,灿鸿、莲花、浪卡这些名字都很有特色,还有之前听到的海燕、蔷薇之类的,就在网上搜了一下,发现台风的命名很有意思。

据专家介绍,西北太平洋地区是世界上台风(热带风暴)活动最频繁的地区,每年登陆我国就有六、七个之多。多年来,有关国家和地区对出没这里的热带风暴叫法不一,同一台风往往有几个称呼。我国按其发生的区域和时间先后进行四码编号,前两位为年份,后两位为顺序号。设在日本东京的世界气象组织属下的亚太区域专业气象台的台风中心,则以进入东经180度、赤道以北的先后顺序编号。美国关岛海军联合台风警报中心则用英美国家的人名命名,国际传媒在报道中也常用关岛的命名。还有一些国家或地区对影响本区的台风自行取名。为了避免名称混乱,有关国家和地区举行专门会议决定,凡是活跃在西北太平洋地区的台风(热带风暴),从去年起一律使用亚太14个国家(地区)共同认可、具有亚太区域特色的一套新名称,以便于各国人民防台抗灾、加强国际区域合作。 每个国家提供10个,台风委员会命名表共有140个名字,分别由亚太地区的柬埔寨、中国、朝鲜、中国香港、日本、老挝、澳门、马来西亚、密克罗尼西亚联邦、菲律宾、韩国、泰国、美国和越南提供。从头轮到尾,用完了再从头开始。

台风委员会命名表将用于通过国际媒体以及向国际航空和航海界发布的预报、警报和公报中,也供各成员用当地语言发布热带气旋警报时使用。这将有助于人们对逐渐接近的热带气旋提高警觉,增加警报的效用。台风委员会仍将继续使用热带气旋编号。

为避免一名多译造成的不必要的混乱,中国中央气象台和香港天文台、澳门地球物理暨气象台经过协商,已确定了一套统一的中文译名。从2000年l月1日起,中央气象台发布热带气旋警报时,除继续使用热带气旋编号外,还将使用热带气旋名字。如2000年的第1号热带气旋名字为“达维”,由柬埔寨提供。 而2012年第10号台风也叫”达维”,因为从2000年开始,140个名字已经用完了,所以从头开始。2013年龙王名字最后改成了海葵。

附命名表:

序号 英文名 中文名 名字来源 意 义
1-1 Damrey 达维 柬埔寨 大象
1-2 Longwang 龙王 中国 神话传说中的司雨之神
1-3 Kirogi 鸿雁 朝鲜 一种侯鸟,在朝鲜秋来春去
1-4 Kai-tak 启德 中国香港 香港旧机场名
1-5 Tembin 天秤 日本 天秤星座
1-6 Bolaven 布拉万 老挝 高地
1-7 Chanchu 珍珠 中国澳门 珍珠
1-8 Jelawat 杰拉华 马来西亚 一种淡水鱼
1-9 Ewiniar 艾云尼 密克罗尼西亚 传统的风暴神(Chuuk语)
1-10 Bilis 碧利斯 菲律宾 速度
1-11 Kaemi 格美 韩国 蚂蚁
1-12 Prapiroon 派比安 泰国 雨神
1-13 Maria 玛莉亚 美国 女士名(Chamarro语)
1-14 Saomai 桑美 越南 金星

2-1 Bopha 宝霞 柬埔寨 花儿名
2-2 Wukong 悟空 中国 孙悟空
2-3 Sonamu 清松 朝鲜 一种松树,能扎根石崖,四季常绿
2-4 Shanshan 珊珊 中国香港 女孩儿名
2-5 Yagi 摩羯 日本 摩羯星座
2-6 Xangsane 象神 老挝 大象
2-7 Bebinca 贝碧嘉 澳门 澳门牛奶布丁
2-8 Rumbia 温比亚 马来西亚 棕榈树
2-9 Soulik 苏力 密克罗尼西亚 传统的Pohnpei酋长头衔
2-10 Cimaron 西马仑 菲律宾 菲律宾野牛
2-11 Chebi 飞燕 韩国 燕子
2-12 Durian 榴莲 泰国 泰国人喜爱的水果
2-13 Utor 尤特 美国 飑线(Marshalese语)
2-14 Trami 潭美 越南 一种花

3-1 Kong-rey 康妮 柬埔寨 高棉传说中的可爱女孩儿
3-2 Yutu 玉兔 中国 神话传说中的兔子
3-3 Toraji 桃芝 朝鲜 朝鲜深山中的一种花
3-4 Man-yi 万宜 中国香港 海峡名,现为水库
3-5 Usagi 天兔 日本 天兔星座
3-6 Pabuk 帕布 老挝 大淡水鱼
3-7 Wutip 蝴蝶 澳门 一种昆虫
3-8 Sepat 圣帕 马来西亚 一种淡水鱼
3-9 Fitow 菲特 密克罗尼西亚 一种美丽芬香的花(Yapese语)
3-10 Danas 丹娜丝 菲律宾 经历
3-11 Nari 百合 韩国 一种花
3-12 Vipa 韦帕 泰国 女士名字
3-13 Francisco 范斯高 美国 男子名(Chamarro语)
3-14 Lekima 利奇马 越南 一种水果

4-1 Krosa 罗莎 柬埔寨 鹤
4-2 Haiyan 海燕 中国 一种海鸟
4-3 Podul 杨柳 朝鲜 一种在城乡均有种植的树
4-4 Lingling 玲玲 中国香港 女孩儿名
4-5 Kajiki 剑鱼 日本 剑鱼星座
4-6 Faxai 法茜 老挝 女士名字
4-7 Vamei 画眉 澳门 一种鸟
4-8 Tapah 塔巴 马来西亚 一种淡水鱼
4-9 Mitag 米娜 密克罗尼西亚 女士名字(Yap语)
4-10 Hagibis 海贝思 菲律宾 褐雨燕
4-11 Noguri 浣熊 韩国 狗
4-12 Ramasoon 威马逊 泰国 雷神
4-13 Chataan 查特安 美国 雨(Chamorro语)
4-14 Halong 夏浪 越南 越南一海湾名

5-1 Nakri 娜基莉 柬埔寨 一种花
5-2 Fengshen 风神 中国 神话中的风之神
5-3 Kalmaegi 海鸥 朝鲜 一种海鸟
5-4 Fung-wong 凤凰 中国香港 山峰名
5-5 Kammuri 北冕 日本 北冕星座
5-6 Phanfone 巴蓬 老挝 动物
5-7 Vongfong 黄蜂 澳门 一类昆虫
5-8 Rusa 鹿莎 马来西亚 鹿
5-9 Sinlaku 森拉克 密克罗尼西亚 传说中的Kosrae女神
5-10 Hagupit 黑格比 菲律宾 鞭子
5-11 Changmi 蔷薇 韩国 花名
5-12 Megkhla 米克拉 泰国 雷天使
5-13 Higos 海高斯 美国 无花果(Chamarro语)
5-14 Bavi 巴威 越南 越南北部一山名

6-1 Maysak 美莎克 柬埔寨 一种树
6-2 Haishen 海神 中国 神话中的大海之神
6-3 Pongsona 凤仙 朝鲜 一种美丽的花
6-4 Yanyan 欣欣 中国香港 女孩儿名
6-5 Kujira 鲸鱼 日本 鲸鱼座
6-6 Chan-hom 灿鸿 老挝 一种树
6-7 Linfa 莲花 澳门 一种花
6-8 Nangka 浪卡 马来西亚 一种水果
6-9 Soudelor 苏迪罗 密克罗尼西亚 传说中的Pohnpei 酋长
6-10 Imbudo 伊布都 菲律宾 漏斗
6-11 Koni 天鹅 韩国 一种鸟
6-12 Hanuman 翰文 泰国 有趣的猴子
6-13 Etau 艾涛 美国 风暴云(Palauan语)
6-14 Vamco 环高 越南 越南南部一河流

7-1 Krovanh 科罗旺 柬埔寨 一种树
7-2 Dujuan 杜鹃 中国 一种花
7-3 Maemi 鸣蝉 朝鲜 一种蝉
7-4 Choi-wan 彩云 中国香港 天上的云彩
7-5 Koppu 巨爵 日本 巨爵星座
7-6 Ketsana 凯萨娜 老挝 一种树
7-7 Parma 芭玛 澳门 澳门的一种烹调风格
7-8 Melor 茉莉 马来西亚 一种花
7-9 Nepartak 尼伯特 密克罗尼西亚 著名的勇士(Kosrae语)
7-10 Lupit 卢碧 菲律宾 残酷
7-11 Sudal 苏特 韩国 水獭
7-12 Nida 妮妲 泰国 女士名字
7-13 Omais 奥麦斯 美国 漫游(Palauan语)
7-14 Conson 康森 越南 古迹

8-1 Chanthu 灿都 柬埔寨 一种花
8-2 Dianmu 电母 中国 神话中的雷电之神
8-3 Mindule 蒲公英 朝鲜 一种小黄花
8-4 Tingting 婷婷 中国香港 女孩儿名
8-5 Kompasu 圆规 日本 圆规星座
8-6 Namtheun 南川 老挝 河
8-7 Malou 玛瑙 澳门
8-8 Meranti 莫兰蒂 马来西亚 一种树
8-9 Rananim 云娜 密克罗尼西亚 喂,你好(Chuukese语)
8-10 Malakas 马勒卡 菲律宾 强壮, 有力
8-11 Megi 鲇鱼 韩国 鱼
8-12 Chaba 暹芭 泰国 热带花
8-13 Kodo 库都 美国 云(Marshalese语)
8-14 Songda 桑达 越南 越南西北部一河流

9-1 Sarika 莎莉嘉 柬埔寨 雀类鸟
9-2 Haima 海马 中国 一种鱼
9-3 Meari 米雷 朝鲜 回波
9-4 Ma-on 马鞍 中国香港 山峰名
9-5 Tokage 蝎虎 日本 蝎虎星座
9-6 Nock-ten 洛坦 老挝 鸟
9-7 Muifa 梅花 澳门 一种花
9-8 Merbok 苗柏 马来西亚 一种鸟
9-9 Nanmadol 南玛都 密克罗尼西亚 著名的Pohnpei 废墟
9-10 Talas 塔拉斯 菲律宾 锐利
9-11 Noru 奥鹿 韩国 狍鹿
9-12 Kularb 玫瑰 泰国 一种花
9-13 Roke 洛克 美国 男子名(Chamarro语)
9-14 Sonca 桑卡 越南 一种会唱歌的鸟

10-1 Nesat 纳沙 柬埔寨 渔夫
10-2 Haitang 海棠 中国 花
10-3 Nalgae 尼格 朝鲜 有生气,自由翱翔
10-4 Banyan 榕树 中国香港 一种树
10-5 Washi 天鹰 日本 天鹰星座
10-6 Matsa 麦莎 老挝 女人鱼
10-7 Sanvu 珊瑚 澳门 一种水生物
10-8 Mawar 玛娃 马来西亚 玫瑰花
10-9 Guchol 古超 密克罗尼西亚 一种香料(调味品)(Yapese语)
10-10 Talim 泰利 菲律宾 明显的边缘
10-11 Nabi 彩蝶 韩国 蝴蝶
10-12 Khanun 卡努 泰国 泰国水果
10-13 Vicente 韦森特 美国 女士名(Chamarro语)
10-14 Saola 苏拉 越南 越南最近发现的一种动物

 

 

除了股票,我们还有诗和远方

pic2 pic3 pic1

 

2015/7/15补:第二幅图拍摄于2011年毕业西线游路上,当时路过比较急,没怎么看内容,今天google后发现还是有些意思,淘金时代很多开拓者倒在这个路上,

Grave of the Unknown Prospector
On To The Golden Hills
— RIP —
On this site is the grave of the unknown prospector. A reminder of the great sacrifices made by our ancestors, who explored and settled the western frontier, and especially to the memory of each and all of the pioneers of Mono County, whose resting place is known only to God. May they rest in peace.
Erected 2003 by E Clampus Vitus, Bodie Chapter No. 64.

Location. 37° 53.2′ N, 119° 5.403′ W. Marker is near Lee Vining, California, in Mono County. Marker is at the intersection of State Highway 120 and State Highway 395/120 on State Highway 120. Click for map. The marker is approximately 5 miles south of Lee Vining. Marker is in this post office area: Lee Vining CA 93541, United States of America.

原链接:http://bo.tactical.digital/Marker.asp?Marker=49976 或者 http://www.hmdb.org/Marker.asp?Marker=49976

还有http://www.placesearth.com/usa/california/mono/historic/historic0.shtml

 

PHP开发安全问题总结

php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,近期需要总结一下以往的问题,在这里借翻译一篇文章同时加上自己开发的一些感触总结一下。

简介

当开发一个互联网服务的时候,必须时刻牢记安全观念,并在开发的代码中体现。PHP脚本语言对安全问题并不关心,特别是对大多数没有经验的开发者来说。每当你讲任何涉及到钱财事务等交易问题时,需要特别注意安全问题的考虑,例如开发一个论坛或者是一个购物车等。

安全保护一般性要点

  • 不相信表单

对于一般的Javascript前台验证,由于无法得知用户的行为,例如关闭了浏览器的javascript引擎,这样通过POST恶意数据到服务器。需要在服务器端进行验证,对每个php脚本验证传递到的数据,防止XSS攻击和SQL注入

  • 不相信用户

要假设你的网站接收的每一条数据都是存在恶意代码的,存在隐藏的威胁,要对每一条数据都进行清理

  • 关闭全局变量

在php.ini文件中进行以下配置:

register_globals = Off

如果这个配置选项打开之后,会出现很大的安全隐患。例如有一个process.php的脚本文件,会将接收到的数据插入到数据库,接收用户输入数据的表单可能如下:

<input name="username" type="text" size="15" maxlength="64">

这样,当提交数据到process.php之后,php会注册一个$username变量,将这个变量数据提交到process.php,同时对于任何POST或GET请求参数,都会设置这样的变量。如果不是显示进行初始化那么就会出现下面的问题:

<?php
// Define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}
?>

此处,假设authenticated_user函数就是判断$authorized变量的值,如果开启了register_globals配置,那么任何用户都可以发送一个请求,来设置$authorized变量的值为任意值从而就能绕过这个验证。
所有的这些提交数据都应该通过PHP预定义内置的全局数组来获取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,其中$_REQUEST是一个$_GET/$_POST/$_COOKIE三个数组的联合变量,默认的顺序是$_COOKIE、$_POST、$_GET。

  • 推荐的安全配置选项

error_reporting设置为Off:不要暴露错误信息给用户,开发的时候可以设置为ON
safe_mode设置为Off
register_globals设置为Off
将以下函数禁用:system、exec、passthru、shell_exec、proc_open、popen
open_basedir设置为 /tmp ,这样可以让session信息有存储权限,同时设置单独的网站根目录
expose_php设置为Off
allow_url_fopen设置为Off
allow_url_include设置为Off

SQL注入攻击

对于操作数据库的SQL语句,需要特别注意安全性,因为用户可能输入特定语句使得原有的SQL语句改变了功能。类似下面的例子:

$sql = "select * from pinfo where product = '$product'";

此时如果用户输入的$product参数为:

39'; DROP pinfo; SELECT 'FOO

那么最终SQL语句就变成了如下的样子:

select product from pinfo where product = '39'; DROP pinfo; SELECT 'FOO'

这样就会变成三条SQL语句,会造成pinfo表被删除,这样会造成严重的后果。
这个问题可以简单的使用PHP的内置函数解决:

$sql = 'Select * from pinfo where product = '"' 
       mysql_real_escape_string($product) . '"';

防止SQL注入攻击需要做好两件事:
对输入的参数总是进行类型验证
对单引号、双引号、反引号等特殊字符总是使用mysql_real_escape_string函数进行转义
但是,这里根据开发经验,不要开启php的Magic Quotes,这个特性在php6中已经废除,总是自己在需要的时候进行转义。

防止基本的XSS攻击

XSS攻击不像其他攻击,这种攻击在客户端进行,最基本的XSS工具就是防止一段javascript脚本在用户待提交的表单页面,将用户提交的数据和cookie偷取过来。
XSS工具比SQL注入更加难以防护,各大公司网站都被XSS攻击过,虽然这种攻击与php语言无关,但可以使用php来筛选用户数据达到保护用户数据的目的,这里主要使用的是对用户的数据进行过滤,一般过滤掉HTML标签,特别是a标签。下面是一个普通的过滤方法:

function transform_HTML($string, $length = null) {
// Helps prevent XSS attacks
    // Remove dead space.
    $string = trim($string);
    // Prevent potential Unicode codec problems.
    $string = utf8_decode($string);
    // HTMLize HTML-specific characters.
    $string = htmlentities($string, ENT_NOQUOTES);
    $string = str_replace("#", "#", $string);
    $string = str_replace("%", "%", $string);
    $length = intval($length);
    if ($length > 0) {
        $string = substr($string, 0, $length);
    }
    return $string;
}

这个函数将HTML的特殊字符转换为了HTML实体,浏览器在渲染这段文本的时候以纯文本形式显示。如<strong>bold</strong>会被显示为:
&lt;STRONG&gt;BoldText&lt;/STRONG&gt;
上述函数的核心就是htmlentities函数,这个函数将html特殊标签转换为html实体字符,这样可以过滤大部分的XSS攻击。
但是对于有经验的XSS攻击者,有更加巧妙的办法进行攻击:将他们的恶意代码使用十六进制或者utf-8编码,而不是普通的ASCII文本,例如可以使用下面的方式进行:

<a href="http://host/a.php?variable=%22%3e %3c%53%43%52%49%50%54%3e%44%6f%73%6f%6d%65%74%68%69%6e%67%6d%61%6c%69%63%69%6f%75%73%3c%2f%53%43%52%49%50%54%3e">

这样浏览器渲染的结果其实是:

<a href="http://host/a.php?variable="> <SCRIPT>Dosomethingmalicious</SCRIPT>

这样就达到了攻击的目的。为了防止这种情况,需要在transform_HTML函数的基础上再将#和%转换为他们对应的实体符号,同时加上了$length参数来限制提交的数据的最大长度。

使用SafeHTML防止XSS攻击

上述关于XSS攻击的防护非常简单,但是不包含用户的所有标记,同时有上百种绕过过滤函数提交javascript代码的方法,也没有办法能完全阻止这个情况。
目前,没有一个单一的脚本能保证不被攻击突破,但是总有相对来说防护程度更好的。一共有两个安全防护的方式:白名单和黑名单。其中白名单更加简单和有效。
一种白名单解决方案就是SafeHTML,它足够智能能够识别有效的HTML,然后就可以去除任何危险的标签。这个需要基于HTMLSax包来进行解析。
安装使用SafeHTML的方法:
1、前往http://pixel-apes.com/safehtml/?page=safehtml 下载最新的SafeHTML
2、将文件放入服务器的classes 目录,这个目录包含所有的SafeHTML和HTMLSax库
3、在自己的脚本中包含SafeHTML类文件
4、建立一个SafeHTML对象
5、使用parse方法进行过滤

<?php
/* If you're storing the HTMLSax3.php in the /classes directory, along
   with the safehtml.php script, define XML_HTMLSAX3 as a null string. */
define(XML_HTMLSAX3, '');
// Include the class file.
require_once('classes/safehtml.php');
// Define some sample bad code.
$data = "This data would raise an alert <script>alert('XSS Attack')</script>";
// Create a safehtml object.
$safehtml = new safehtml();
// Parse and sanitize the data.
$safe_data = $safehtml->parse($data);
// Display result.
echo 'The sanitized data is <br />' . $safe_data;
?>

SafeHTML并不能完全防止XSS攻击,只是一个相对复杂的脚本来检验的方式。

使用单向HASH加密方式来保护数据

单向hash加密保证对每个用户的密码都是唯一的,而且不能被破译的,只有最终用户知道密码,系统也是不知道原始密码的。这样的一个好处是在系统被攻击后攻击者也无法知道原始密码数据。
加密和Hash是不同的两个过程。与加密不同,Hash是无法被解密的,是单向的;同时两个不同的字符串可能会得到同一个hash值,并不能保证hash值的唯一性。
MD5函数处理过的hash值基本不能被破解,但是总是有可能性的,而且网上也有MD5的hash字典。

使用mcrypt加密数据
MD5 hash函数可以在可读的表单中显示数据,但是对于存储用户的信用卡信息的时候,需要进行加密处理后存储,并且需要之后进行解密。
最好的方法是使用mcrypt模块,这个模块包含了超过30中加密方式来保证只有加密者才能解密数据。

<?php
$data = "Stuff you want encrypted";
$key = "Secret passphrase used to encrypt your data";
$cipher = "MCRYPT_SERPENT_256";
$mode = "MCRYPT_MODE_CBC";
function encrypt($data, $key, $cipher, $mode) {
// Encrypt data
return (string)
            base64_encode
                (
                mcrypt_encrypt
                    (
                    $cipher,
                    substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
                    $data,
                    $mode,
                    substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
                    )
                );
}
function decrypt($data, $key, $cipher, $mode) {
// Decrypt data
    return (string)
            mcrypt_decrypt
                (
                $cipher,
                substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
                base64_decode($data),
                $mode,
                substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
                );
}
?>

mcrypt函数需要以下信息:
1、待加密数据
2、用来加密和解密数据的key
3、用户选择的加密数据的特定算法(cipher:如 MCRYPT_TWOFISH192,MCRYPT_SERPENT_256, MCRYPT_RC2MCRYPT_DES, and MCRYPT_LOKI97
4、用来加密的模式
5、加密的种子,用来起始加密过程的数据,是一个额外的二进制数据用来初始化加密算法
6、加密key和种子的长度,使用mcrypt_get_key_size函数和mcrypt_get_block_size函数可以获取
如果数据和key都被盗取,那么攻击者可以遍历ciphers寻找开行的方式即可,因此我们需要将加密的key进行MD5一次后保证安全性。同时由于mcrypt函数返回的加密数据是一个二进制数据,这样保存到数据库字段中会引起其他错误,使用了base64encode将这些数据转换为了十六进制数方便保存。

参考文献:http://www.codeproject.com/Articles/363897/PHP-Security

PHP开发安全问题总结,首发于博客 – 伯乐在线