CSRF

Cross Site Request Forgery, 即跨站请求伪造。

原理

前提是向目标网站注入恶意代码并获得了用户身份信息(Cookie),该恶意代码的作用是在用户主动或不知情(如img标签)的情况下请求欺诈网站,然后在欺诈网站上带上获得的用户身份信息请求目标网站,从而达到攻击的目的。简单来说就是:攻击者盗用用户身份发起恶意请求。

CSRF因为需要注入代码、获得cookie,所以是在XSS攻击基础上发起的。

防御

  • 表单提交生成表单令牌(Token), 服务端每次提交需要校验令牌。
  • 使用验证码
  • 验证referer头

XSS

Cross-site Scripting(XSS) 跨站脚本攻击,主要利用HTML和JavaScript代码注入。

主要原理

网站程序(前端和后端)未对用户提交/请求的数据进行检查和过滤,将包含JavaScript代码的数据直接输出到浏览器解释执行。

类型

  • 反射型XSS

反射型XSS只是简单的把用户输入的数据“反射”给浏览器,也就是说需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫作“非持久型XSS”。

  • 存储型XSS

主动提交恶意数据到服务器,攻击者在数据中嵌入代码,这样当其他用户请求后,服务器从数据库中查询数据并发给用户,用户浏览此类页面时就可能受到攻击。

  • DOM-based XSS

基于DOM的XSS,通过对具体DOM代码进行分析,根据实际情况构造DOM节点进行XSS跨站脚本攻击。

防御

  • 输入过滤,对用户提交/请求的数据进行转义或过滤HTML标签
  • 输出转义
  • 考虑设置HTTP Only Cookie

参考资料

PHP运行模式和(非)线程安全

运行模式

  • CGI模式

HTTP服务器收到用户请求后,启动一个子进程(php / php.exe)去处理,处理完后结束该子进程。

  • FastCGI模式

FastCGI作为HTTP服务器和动态脚本语言(PHP)的通信接口。PHP启动FastCGI进程管理器PHP-FPM,HTTP服务器收到用户请求后转发给PHP-FPM处理。

  • Apache模块模式

 mod_php以Apache模块的形式,在Apache启动时加载进去,Apache服务器收到用户请求后交由mod_php模块处理。

  • CLI

命令行模式,直接执行 php 命令。

  • ISAPI模式

Windows服务器下作为IIS的WEB服务扩展运行。PHP 5.3版本后丢弃 ISAPI 模块支持,使用改进的 FastCGI SAPI模块替代[Link]。

线程安全和非线程安全

PHP以Apache模块模式和ISAPI模式运行时,用Thread Safe版本;其它模式用Non-Thread Safe版。

 

HTTP状态码

1xx消息


这一类型的状态码,代表请求已被接受,需要继续处理。

101 Switching Protocols

服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用不同的协议来完成这个请求。如从 HTTP1.1 切换到 HTTP/2 或 Websocket

2xx成功


这一类型的状态码,代表请求已成功被服务器接收、理解、并接受

200 OK

请求已成功

206 Partial Content(RFC 7233

服务器已经成功处理了部分GET请求,如断点续传、分段下载。

3xx重定向


301 Moved Permanently

永久重定向

302 Moved Temporarily

临时重定向

4xx客户端错误


这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理

400 Bad Request

The request could not be understood by the server due to malformed syntax

401 Unauthorized

未通过 HTTP Auth 认证

403 Forbidden

服务器拒绝执行

404 Not Found

服务器找不到请求资源

405 Method Not Allowed

请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表。例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。

5xx服务器错误


这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生

500 Internal Server Error

通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

502 Bad Gateway

后端服务器无响应,如nginx+php-fpm架构中php-fpm没有启动

503 Service Unavailable

由于临时的服务器维护或者过载,服务器当前无法处理请求。

504 Gateway Timeout

后端处理超时,如php执行时间超过nginx的fastcgi_read_timeout时间

 

Notes


301/302 区别

用户通过浏览器访问并无感知区别,主要作用于搜索引擎,302告诉搜索引擎此处跳转是临时的,应当收录原来的地址,有可能会被搜索引擎认为作弊;301告诉搜索引擎原地址已永久转移,应当收录新地址。引用一段StackOverflow的答案:

Status 301 means that the resource (page) is moved permanently to a new location. The client/browser should not attempt to request the original location but use the new location from now on.

Status 302 means that the resource is temporarily located somewhere else, and the client/browser should continue requesting the original url.

PHP和HTTP Authentication

# 获取认证用户名和密码

$_SERVER['PHP_AUTH_USER'];
$_SERVER['PHP_AUTH_PW'];

参考资料:

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
    https://www.nginx.com/resources/admin-guide/restricting-access-auth-basic/
    http://php.net/manual/fa/features.http-auth.php

《小王子》

大人不理解小孩的世界,小孩也理解不了大人的世界。小孩觉得大人把事情搞复杂了,但是,终会有一天,小孩也会成为大人。或许世界上本来就没有简单的事情,有的只是简单的心灵。

我之所以这样详细地告诉你们B612小行星的来历,并把它的编号说出,是由于那些大人的缘故。大人喜欢数字。当你对大人讲起你新结识的一位朋友时,他们从来不提那些根本性的问题。

我大概已有点像大人,我可能是老了。

你知道,当一个人感到十分烦闷时,总是喜欢看日落的。

星星亮晶晶的,是不是为让每个人有一天可以重新找到自己的那一颗星……

只有用心灵看,才能看得清楚;本质的东西,眼睛是看不见的。

你知道,我的那朵花儿,我要负责的!她是那么娇弱!那么幼小!她只有四根小刺,来保护自己,对付全世界……

碎碎念

很多年没带耳机睡觉了,自从初中染上了晚上听电台的习惯以来,睡时没有点噪音反而让我感到不适。一个人睡的时候我会直接开着音箱,带耳机睡是大学时怕影响舍友而不得已做的选择。现在发现,这是我大学获得最大的乐趣之一,巅峰的时候,试过顶着两个头戴式的大耳机睡。而我最喜欢的是戴入耳塞睡,除了它睡觉没那么碍事外,最主要的有时候它可以让我听到自己心跳和呼吸的声音。那是很真实很有安全感的一种感觉。

从小时候的流行歌卡带,到电台,到英文歌,到后摇,再到乱七八糟的各种风格流派,再到古典,我一直很想不明白为什么自己会喜欢和这些声音在一起,自己没有音乐天赋,五音不全,乐器也不会,口才也不好,写不出乐评,也谈不上有何鉴赏能力,但一直以来,我对此从未生厌,虽然未踏上追星烧器材的路子,但一路上各种折腾,乐此不疲。前几天看到有人提问,读书记性不好,读过后很快记不住,因此怀疑读书意义何在。一人的回答让我印象颇深,大概意思是尽管书中的细枝末节会被遗忘,但长久过程沉积下的是一种内涵,高大上的说法是“文人气息”。可能说得有点自我,我的理解是,这些我们耳朵听到眼睛看到的东西,进入我们头脑后,我们能接受下来,便成了一种“美”,这是一种很简单的美,也不需付出什么代价,很庆幸自己没有错过。

另外一件坚持了很长时间的事情是打篮球。没有记错的话是小学四年级时,从外婆那拿回一个黄色的篮球,去球场玩过几次后,到现在也没中断过。但是最近上到球场却有种恐惧感,不是怕打不好不是怕受伤不是怕累,而是怕自己不知道哪一天会远离这个场地。想想自己年近三十,有着约17年的“职业生涯”,接近要“退役”了。如果问我什么时候意识到自己老了,我可能会说是当我打球越来越远离篮底的时候。当我们在喜欢的事情上力不从心改变不了事实的时候,除了妥协我们似乎别无选择。而随着年龄的增加,这种妥协只会越来越多。

老婆跟我说十九周了。而此时我还没开始准备怎么对付这个小家伙。多了一个这样的角色出现,不知道人生这部戏的剧情会变成怎样。

惑与不惑

时间啊就是这样滚着滚着就走,上一次新年日记也许是几年前了,现在我已经不再用纸用笔写东西,每一年都有很多话想对自己说,每一年都觉得要有个好的计划,然而最终想法都跟着时间脚步远去,直至后来我主动忘却了。

过去很多的一些年里我都认同一个说法:世上唯一不变的是变化。并不因为找不到反驳的理由,而是感性地接受了这种力量,潜移默化的认为所有好的坏的事情总会改变。现在想来,我并不是有多认同这种观点,而是在等,等待事情自己去变化。多么可笑的一件事。过去我所期待的自己说话会更多更自然、技术会学到更深、书会看得更多、会更有主见、会生活得更好…….,我所做的原来不过是拿出了一支笔和一张白纸,从来没有拿起笔画过一笔,我以为迟早白纸里会出现我梦里的画面。所谓的迷失,我觉得,并不是我不知道方向在哪路怎走,而是明明知道了方向看到了路却没有走下去。

人生是复杂矛盾的东西,有时候我们希望能有更多选择,有时候我们又害怕做抉择。有时候我们坚信“真理”,后来却发现“真理”原来是自己用来掩饰的借口。有时候我们看到了岸,然而手脚无动于衷,像习惯了安于现状地随大流漂荡。可能这只是大人们世界里的烦恼。在麦兜的世界,所有事情都应该是自己的样子。是猪头就是猪头,你首先得接受事实,然后要顺从自然规律,你想变王子变武林高手变科学家,你要去行动。我经常对自己说顺其自然,我想我并没领悟到顺其自然的意思。不是不强求,而是不要拖后腿。

这个阶段有个令我很难接受的事实是生离死别。就在元旦一小学很要好同学离开了。我没有去见他最后一面,也没有回去参加丧礼。一方面刚搬进新房家人顾忌,另一方面我不知道怎样面对。他的离去,顿时让我觉得就像把我埋在家乡最深那条根挖断了。随着亲戚的搬迁,想想以后回家乡,我真的不知道还能找谁了。很害怕的事情是你所熟悉的牵挂的面孔、声音,突然再也回不来。一刻也不敢想象。有些人只要能看到他听到他,对我们来说已经是毫无理由地幸福了。这时候我又矛盾了,人生在哪里,人生到底为了什么。

Untitle

“这样的旋律听起来让人很舒服”

“就像即将死去那一刻有人抚着你的脸对你说“安心去吧”那样舒服吗?”

“对,就是那样”

—  <Crusade> By Pentatonic

Three days in Phuket 

说来惭愧,毕业这么久,很多英语已经忘得差不多。标题想来想去也还是这几个单词。跟别人沟通大部分时间都是 “yes”,”ok”。看来还是想办法把英语捡回来才行,万一真有一天肉翻了呢。

刚进酒店房间,看到床上用玫瑰摆了个心形,想起自己订房时为了能尽量得到大床而不是双床就备注要蜜月房,没想到成真了,权当结婚周年纪念吧。但真正的蜜月却不知道去了哪儿。

在普吉也实现了潜水的愿望,不得不说价钱上比三亚厚道得多,酒店接送+游艇一日游+深潜+潜水照片视频+午餐才850左右。虽然一直不是很喜欢湿漉漉的东西,但是对大海却一直有种说不清的感觉。它看起来蓝得让人不由自主的爱上它,平静得让你觉得心胸从来都未如此的开阔,可以将所有的喜怒哀乐都从容放下。但当置身其中一眼望去无边无际时会令人发慌,偶尔涌起的大浪让我觉得人是如此的渺小,大海分分钟可以连船带人一口吞掉。同样,在它深处有各种让人着迷的生物和景色,但水下的气压和恐惧感也让你不敢轻举妄动。所以当潜到水下时,除了不断看教练手势,时刻保持紧张、配合拍照、调整位置外,几乎都忘了认真去观察水下的景色了。最终我也忘了我下水为的是什么。回来发了个朋友圈,很多人围观很多人点赞,但并不能弥补我失去的景色。所以罢了,最后我把所有的朋友圈也删了。我觉得生活不应该这样简单的玩下炫耀下,不应该把别人的看法放在第一位,应该首先问下自己心里想要什么。很多东西需要用心去体验,才能获得自己真正想要的。

最后一天去了芭东,依然没有看到日出日落,看来只能寄望下一年了。在芭东没有去酒吧喝酒、没有去看人妖秀、没有去海鲜市场吃海鲜、没有去做massage,所以基本上是在街上瞎逛,然后晚上吃了个感人的晚饭:2份饮料、一份牛河、4个烤翅、一份青菜,外加山顶景观,410泰铢约80多RMB,有点不敢相信这是景区的饭店的消费。或许自己还是没有开化,旅游本来就是去体验各种的风俗、生活,而自己还是那么拘谨,如此躲避,人生似乎少了很多的乐趣。