Làm sao để trả lương lập trình viên ít hơn

Nay nhìn thấy giới thiệu post này https://www.yegor256.com/2016/12/06/how-to-pay-programmers-less.html trên reddit, bài viết tiếng Anh, cũng dễ đọc, nhưng dịch qua cho mọi người đọc cho nhanh.

Để tạo ra phần mềm, bạn cần các lập trình viên. Nhưng thật không may. Họ đắt đỏ, lười biếng, và hầu như không thể bảo được. Phần mềm họ viết có thể chạy hoặc không, nhưng bạn vẫn phải trả lương cho họ hằng tháng. Đúng vậy, tốt hơn là tìm cách trả lương ít đi. Tuy nhiên, thỉnh thoảng họ hiểu ra rằng họ đang bị trả lương thấp và họ bỏ việc. Làm sao để ngăn chặn việc đó? Đen là chúng ta không thể sử dụng bạo lực hay gì đó, nhưng tôi có các cơ chế khác. Để tôi chia sẻ cho bạn.

Giữ bí mật về lương.

Hiển nhiên. Đừng để họ thảo luận với nhau về lương. Họ phải giữ thông tin bí mật. Cảnh báo họ hoặc thấm chí ký các thỏa thuậtn bảo mật về việc nói về lương, thưởng, kế hoạch đền bù, … Họ phải cảm thấy thông tin này là đọc hại và không bao giờ hé răng với người khác. Nếu họ không biết được các đồng nghiệp có bao nhiêu, họ sẽ không hỏi về tăng lương nữa.

Tăng lương không theo kế hoạch.

Bạn không nên có hệ thống tăng lương hay đuổi việc. Bạn sẽ tự làm việc đó khi nào bạn cảm thấy thích, khi họ làm việc hiệu quả và năng suất. Tạo ra các quyết định không thể dự đoán được. Việc khó đoán tạo nên nỗi sợ, và đây chính là thứ bạn cần. Họ sẽ sợ bạn và sẽ không phàn nàn về việc trả lương thấp trong thời gian dài.

Không hội họp.

Đừng cho phép họ tham gia các buổi meetup hay hội thảo. Họ có thể gặp các nhà tuyển dụng và hình dung ra lương của họ như vậy là không đủ. Nói rằng việc hội họp chỉ làm mất thời gian. Tốt hơn hết là tổ chức các sự kiện ở nơi làm việc. Họ thường xuyên ở cùng nhau, không gặp các lập trình viên từ các công ty khác. Họ biết ít hơn sẽ tốt cho bạn.

Không cho làm việc ở nhà.

Công sở phải là ngôi nhà thứ hai của họ. Đương nhiên có thể tốt hơn ngôi nhà thứ nhất. Họ phải tới đó hằng ngày, có một bàn làm việc, một máy tính, một ghế và kẹp giấy. Họ sẽ gắn bó với nơi làm việc và rất khó để họ rời đi, và cảm thấy không quan tâm việc họ bị trả lương thấp. Không bao giờ cho phép họ làm việc remote - họ sẽ bắt đầu nghĩ về ngôi nhà lớn hơn với khoản lương lớn hơn.

Theo dõi họ.

Đảm bảo rằng họ toàn sử dụng email server của bạn, máy tính, server, thậm chí cả điện thoại. Cài đặt các phần mềm theo dõi tất cả các tin nhắn. Bạn nên để mắt tới tất cả lập trình viên, thông báo ngay lập tức việc về hành vi khác thường hay đáng ngời (office camera sẽ giúp bạn). Bất kỳ liên hệ với các công ty khác của họ bạn nên cân nhắc. Các nhân viên phải biết họ đang bị theo dõi. Nỗi sợ sẽ được nhân lên và luôn luôn là hữu ích.

Thỏa thuận với đổi thủ.

Liên lạc với các đổi thủ chính trong khu vực và đồng ý không tuyển dụng các lập trình viên của họ nếu họ đừng động vào bạn. Nếu họ từ chối hợp tác, hãy giữ lại vài lập trình viên trung thành. Tuyển mộ các lập trình viên cộm cán của họ với giá gấp đôi. Bạn sẽ thực sự thuê được họ, đúng vậy, những bước đi này sẽ làm rung chuyển thị trường ở đây, và các đổi thủ sẽ phải sợ bạn, họ sẽ không bao giờ động đến các nhà phát triển nô lệ của bạn nữa.

Khuyến khích giá trị tập thể.

Tẩy não họ bằng cách giao tiếp về sự lớn mạnh của công ty, nhiệm vụ lớn cần nhắm tới, và những đóng góp quan trọng của họ. Những con số về tiền lương dường như đâu còn quan trọng nữa so với hàng tỷ đô la mà bọn họ sẽ thống trị. Họ sẽ gục ngã, về lâu về dài, việc này sẽ hiệu quả.

Xây dựng một gia đình.

Các bữa tiệc chung, tiệc bia ngày thứ sáu, sự kiện team building, chơi bowling, sinh nhật, ăn trưa và tiệc tối - sử dụng các công cụ này để tạo cảm giác như công ty của bạn là nhà. Tiền không phải là câu chuyện để người nhà nói với nhau, đúng khoong? Hỏi về việc tăng lương nghe như phản bội người nhà - họ sẽ ngại điều đó.

Gây áp lực lên họ.

Đừng để họ nhàn rỗi, nó là không tốt cho bạn. Hay kèm chặt deadlines, các vấn đề phức tạp cần giải quyết cùng cảm giác tội lỗi đè lên vai họ. Họ sẽ không hỏi về việc tăng lương, liên tục cảm thấy tội lỗi về những thứ bạn đặt cho mục đích của dự án không đạt được. Cố gắng tạo ra trách nhiệm của họ cho các lỗi nhiều nhất có thể.

Hãy hứa.

Bạn không cần phải giữ họ, nhưng bạn phải hứa với họ rằng: họ sẽ được tăng lương sớm, hay các vụ đầu tư, các hợp đồng lớn đã ký, hay “khi nào thời điểm ấy đến”. Điều quan trọng không kém là bạn hãy thực hiện lời hứa của bạn - hãy giữ cho tay mình luôn luôn sạch.

Mua cho họ ghế đệm và bóng bàn.

Dành chút thời gian vào những thứ vui. Một máy xay cà phê chuyên nghiệp và đẹp bạn sẽ chỉ mất 1000$ và có thể tiết kiệm cho bạn 200$ đến 300$ mỗi tháng. Hãy tính xem. Hãy tự làm thay vì để đến khi họ nói, nó luôn luôn là tốt khi có máy chơi game trong khu làm việc. Cũng thế cho họ giữ các thú cưng nhỏ trong công sở - họ sẽ làm việc lâu hơn nhưng ta tốn ít tiền hơn.

Cho họ chức danh hay ho.

Gọi họ là Vice Presidents, ví dụ VP of Engineering, VP of Technology, VP of Whatever. Không quá lớn, nhưng rất quan trọng với họ. Lương của họ sẽ nhỏ hơn là chức danh của họ nhưng họ có thể đặt nó lên LinkedIn profile. Cũng có thể không dùng Vice President, hãy thử Senior Architect, Lead Technical Lead, Chief Scientist, etc…

Giúp họ sống sót.

Hầu hết các lập trình viên ngốc nghếch trong quản lý tiền bạc. Họ đơn giản không biết cả mua bảo hiểm, các khoản trợ cấp lương hưu, hay thậm chí các việc trả thuế. Bạn sẽ giúp họ, vì những lợi ích của bạn, đúng vậy. Họ sẽ hạnh phúc khi cảm thấy an toàn trong tay bạn, và sẽ không bỏ bạn mà đi. Họ sẽ không hỏi về tăng lương nữa, bởi vì họ cảm thấy tồi tệ khi phải tự làm. Bạn phải như các bậc cha mẹ và họ sẽ như là con cái. Nó là một mô hình cũ mà tốt. Việc này chắc chắn được việc.

Hãy đào tạo họ đúng cách.

Đừng dạy họ các công nghệ mới. Đào tào nghiêm ngặt các topíc cần cho việc của họ hiện tại. Không bao giờ cho phép họ pass qua bất kỳ chứng chỉ hay khóa học tốt nào mà có tiềm năng làm tăng giá trị thị trường của họ - đó chẳng phải là điều thú vị gì cho bạn. Đào tạo họ trong nơi làm việc hay hệ thống của bạn, điều khiển cái mà họ sẽ học. Tất cả điều này để đảm bảo rằng họ sẽ không trở nên tốt hơn nhưng không phải cho hệ thống của bạn.

Hãy trở thành bạn.

Đây là điều quan trọng, là siêu kỹ thuật. Bạn phải như một người bạn với các lập trình viên. Nó sẽ rất khó để đàm phát với một người bạn - họ không làm điều đó một cách dễ dàng được. Họ sẽ làm việc cho bạn với ít tiền chỉ bởi vì bạn là bạn tốt của họ. Làm thế nào để trở thành những người bạn? Hãy gặp gia đình của họ, mời họ tới ăn tối, gửi quà tới sinh nhật họ, Họ sẽ tiết kiệm rất nhiều tiền cho bạn.

Tôi có quên gì không?

The art of computer prgramming PREFACE

Lời tựa

Tiến trình chuẩn bị chương trình cho một máy tính là đặc biệt hấp dẫn, không chỉ bởi vì lợi ích kinh tế và khoa học, mà còn bởi sự đẹp dễ của nó giống như là thơ ca hoặc âm nhạc. Cuốn sách này là volumn đầu tiên trong nhiều volumns được thiết kế để đào tạo người đọc rất nhiều kĩ thuật để trở thành một lập trình viên.

Các chương trong sách không chỉ giới thiệu về lập trình máy tính, chúng tôi giả định rằng bạn đó có kinh nghiệm lập trình trước đó. Điều kiện để hiểu sách thực ra rất đơn giản, nhưng với những người ít kinh nghiệm cần bỏ ra nhiều thời gian và thực hành theo trình tự để hiểu đợc các khái niệm của một máy tính số. Người đọc nên có:

a) Một vài ý tưởng về cách một chương trình trong máy tính hoạt động, không cần thiết đến mức điện tử, chỉ cần ở mức các chỉ thị có thể lưu trong bộ nhớ máy tính như thế nào và thực thi ra sao.

b) Có thể đưa ra các giải pháp cho các vấn đề như là các thuật ngữ rằng một máy tính có thể hiểu được chúng (Các cỗ máy không có ý thức, chúng làm chính xác những gì ta nói với chúng, không hơn không kém).

OWASP Testing Guide - 2 Conduct search engine discorvery/reconnaissance for information leakage (OTG-INFO-001)

Tổng quan:

Có các cách trực tiếp hoặc gián tiếp để search engine khám phá và reconnaissance. Phương pháp trực tiếp liên quan để việc searching, đánh chỉ mục và liên kết nội dung từ caches.

Mỗi search engine robot phải crawling toàn bộ, nó bắt đầu đánh chỉ mục dựa vào các tags và các thuộc tính liên quan, như , để sắp xếp và trả về các kết quả liên quan, nếu file robots.txt không được cập nhật trong suốt vòng đời của website, …<br>Chủ website có thể sử dụng các …

nhiệm vụ

Hiểu được thiết kế nhạy cảm và các thông tin cấu hình của ứng dụng/hệ thống/tổ chức được exposed cả trực tiếp (trên website hệ thống) hay gián tiếp (trên các third party website).

  • Network diagrams và configurations.
  • Archived posts và emails bởi administrators và các key staff khác.
  • Cơ chế đăng nhập và username formats
  • Usernames và password
  • Error mesage content
  • Development, test, UAT và staging versions của website

Search operators

Sử dụng các advanced “sites:” search operator, có thể giới hạn kết quả tìm kiếm từ một domain. Sử dụng nhiều search engine cung cấp để có thể xem nhiều kết quả khác nhau. Cân nhắc sử các search engines sau.

  • Baidu
  • binsearch.info
  • Bing
  • Duck Duck Go
  • ixquick/StartPage
  • Google
  • Shodan
  • PunkSpider

Duck Duck Go và ixquick/Startpage giảm thông tin về tester

Google cung cấp “cache:” search operator, cùng tác dụng với việc bấm cached bên cạch kết quả search

Google SOAP Search API hỗ trọ doGetCachedPage … Một bản implementation của đang được phát triển bởi “OWASP Google Hacking” Project

PunkSpider là web application vulnerability search engine. Nó hữu dụng khi sử dụng để kiểm thử bằng tay. Tuy nhiên nó cũng hữu dụng để tìm ra các vulnerabilities bằng script-kiddies.

Ví dụ:

OWASP Testing Guide - Web Application Security Testing 1

Testing: Giới thiệu và nhiệm vụ:

Phần này sẽ mô tả phương pháp OWASP web application security testing và giải thích các test tìm các vulnerabilities trong ứng dụng

What is Web Application Security Testing?

A Security test là một pháp pháp đánh giá độ bảo mật của hệ thống máy tính hoặc mạng bằng các phương pháp xác nhận và xác minh sự bảo mật. Việc Test bảo mật cho ứng dụng web tập trung vào xác minh tính bảo mật của ứng dụng web.

What is a Vulnerability?

Là một lỗ hổng (flaw) hoặc điểm yếu (weakness) trong một thiết kế hệ thống, hoặc bản cài đặt, điều hành hoặc quản lý có thể khai thác nhằm vào bảo mật hệ thống.

What is a Threat?

Một threat có thể là bất cứ thứ gì (Một mã độc bên ngoài, một người dùng hệ thống, một hệ thống không ổn định, etc…) điều này có thể làm hại các tài sản trong ứng dụng (các tài nguyên có giá trị, như là dữ liệu trong database hoặc trong một file hệ thống) bằng cách tìm ra các vulnerability

What is a Test?

Một test là một hành động để chứng minh rằng ứng dụng cần phải trang bị bảo mật

What is the OWASP testing methodology?

Security testing sẽ không bao giờ là một môn khoa học chính xác, nơi mà một dnh sách đầy đủ của tất cả vấn đề nên được test có thể định nghĩa, Thay vào đó, security testing chỉ là một kĩ thuật phù hợp với việc kiểm tra bảo mật của ứng dụng web trong hoàn cảnh nhất định. Mục đích của dự án này là thu thập tất cả các kĩ thuật, giải thích các kĩ thuật và giữ cho guide này được cập nhật thường xuyên. OWASP Web Application Security Testing là phương pháp dựa trên black box approach. The tester không biết thứ gì về hệ thống cần test.

The mô hình bao gồm:

  • Tester: Người mà thực hiện hành động test
  • Công cụ và phương pháp: Là phần chính cho dự án Testing Guide
  • Ứng dụng: The black box to test.

Bài test sẽ chia thành 2 phase:

Phase 1: Passive mode: (bị động)

Trong pasive mode, tester sẽ cố gắng hiểu logic ứng dụng và chơi với ứng dụng. Các công cụ có thể được sử dụng để thu thập thông tin. Ví dụ, một HTTP proxy có thể được sử dụng để quan sát tất cả các HTTP request và response. Ở cuối phase này, tester nên hiểu được các điểm truy cập vào ứng dụng (gates) (VD: HTTP header, parameters, và cookies). Phần thu thập thông tin sẽ giải thích cách để tao một passive mode test.

Ví dụ để tester có thể folloing:

1
https://www.example.com/login/Authentic_Form.html

Link này có thể dẫn đến một form đăng nhập nơi mà ứng dụng yêu cầu Username và password.

The following parameters trình bày 2 cổng truy cập tới ứng dụng:

1
http://www.example.com/Appx.jsp?a=1&b=1

Trường hợp này, ứng dụng sẽ show 2 cổng (param a và b). Tất cả các cổng có thể được tìm thấy trong phase. Một file excel có với cấu trúc thư mục của ứng dụng và tất cả các điểm truy cập sẽ rất hữu dụng cho phase 2

Phase 2: Active mode (chủ động):

Trong phase này tester bắt đầu test sử dụng các phương pháp được mô tả trong các mục dưới đây.

Có thể chia active test thành 11 danh mục nhỏ hơn:

  • Information Gathering
  • Configuration and Deployment Management Testing
  • Identity Management Testing
  • Authorization Testing
  • Session Management Testing
  • Input Validation Testing
  • Error Handing
  • Cryptography
  • Business Login Testing
  • Client Side Testing

Testing for Information Gathering

Hiểu được cách cấu hình deploy tới server hosting là phần quan trọng của bản thân việc testing. Sau tất cả một dãy ứng dụng chỉ mạnh như là phần yếu nhất. Nền tảng ứng dụng là rất rộng và đa dạng, nhưng có vài lỗi cấu hình có thể được khai thác theo cùng một cách

Migrate wordpress site

Migrate

Các bước để chuyển website wordpress sang server khác sẽ là:

Chuyển code qua
Chuyển database qua

Việc chuyển database cần phải thay đổi đường dẫn tuyệt đối trong các bản ghi trong csdl:

Ta cần plugin tên là “WP Migrate DB” hình đàn chim màu đen nền xanh dương

Reverse Engineering for beginers

Chương 1: Code Patterns

1.1. Phương pháp

Khi tác giả của cuốn sách này lần đầu học C sau đó là C++, anh ta viết các mảnh code nhỏ, biên dich chúng, rồi cố hiểu được output nó đưa ra. Có thể kĩ thuật này cũng giúp được những người khác.

Có những web site với nhiều trình biên dịch khác nhau, cho ta xem kết quả online như: https://godbolt.org/.

Thực hành

Khi học, tôi thường compile các functions nhỏ, và cố viết lại chúng bằng asm, cố gắng làm nó ngắn gọn hơn. Có thể nó không phù hợp trong thực tế, và không thể hiệu quả bằng các trình biên dịch hiện đại, nhưng nó lại giúp tôi hiểu hơn về asm

Optimization levels và debug information

Source code được compile bởi các trình biên dịch khác nhau với rất nhiều optimization levels. Một trình biên dịch điển hình sẽ có 3 tầng optimized. Có thể là không optimized, optimized cho tốc độ, hoặc optimized cho kích cỡ. Không optimized sẽ giúp chúng ta hiểu dễ hơn, optimized sẽ khó hơn cho RE.

Ngoài optimized level trình biên dịch có thể thêm vào các debug information, để dễ dàng cho việc debug. Một tính năng quan trọng của debug code là bao gồm các links giữa các dòng source code.

Reverse engineers sẽ phải chạm trán cả 2 loại trên. Cuốn sách sẽ cung cấp các ví dụ về cả 2 debug và release version.

1.2. Vài nền tảng

Basic and Digest Access Authentication

HTTP Authentication: Basic và Digist Access Authentication RFC 2617 thay thế RFC 2069

Vị trí của nó

HTTP Authentication là một phần của HTTP-Protocol. HTTP Protocol ở tại Layer 5/Layer 6
(Chính xác layer 5 và 6 là gì)

Tổng quan / Mục đích

HTTP Authentication cung cấp một cơ chế để yêu cầu một username và password để truy cập tài nguyên web

HTTP Authentication được khởi tạo bởi web server hoặc một external cgi-script
(external cgi-script là gì)

Có 2 mô hình hiện tại có sẵn trong HTTP 1.1 protocol, là “Basic” và “Digist” Access Authentication

Basic Access Authentication

Ví dụ một HTTP Header:

1
2
3
4
5
6
7
GET /download/report.doc HTTP/1.1
Accept: application/msword, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: 10.0.0.5:81
Connection: Keep-Alive

Khi nhận được request server sẽ đọc file cấu hình:

Server chỉ cho phép truy cập các người dùng đã biết

Server gửi HTTP 401 Authorization yêu cầu Response Error page :

1
2
3
4
5
6
7
8
HTTP/1.1 401 Authorization Required
Date: Tue, 22 Jun 2004 03:54:06 GMT
Server: Apache/1.3.29 (Unix)
WWW-Authenticate: Basic realm="Protected"
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

Bây giờ trình duyệt sẽ hiển thị Username/Password prompt hiển thị host name và authentication realm

Nếu Người dùng ấn cancel-Button thì

Capture the flag


Capture the flag 101

Xin chào

Capture The Flags, hay CTFs, là một loại cuộc thi về bảo mật máy tính.

Các đội (đôi khi là các cá nhân) sẽ đọ sức với những người khác để kiểm tra kĩ thuật về bảo mật máy tính.

Trong guide/wiki/handbook bạn sẽ học được các kĩ thuật, các tiến trinfhm các phương pháp bạn cần để thắng trong cuộc thi Capture the Flag

Các bài thi được chia vào 5 loại dưới đây

Forensics (Điều tra kĩ thuật số)

Forensics là kĩ thuật phục hồi thông tin từ dữ liệu trên máy tính. Có rất nhiều phương pháp để tìm ra dữ liệu dường như đã bị xóa, không được lưu trữ.

Một phần quan trọng nhất của Forensics là phải có các công cụ đúng đắn, cũng như phải biết một số phần bên dưới:

  • File Formats
  • EXIF data
  • Wireshark & PCAPs
  • Stegonagraphy
  • Disk Imaging

Steg: Stegsolve, Pillow, Openstego

Network: WireShark, TCPDump, HxD,..

Memory: Volatility, Osforensic, binwalk, dd..

wargame.whitehat.vn

Web Application

Khai thác lỗ hỗng các ứng dụng web

Cần có tư duy tốt và nỗ lực cá nhân

Tamper data, HackerBar, curl,…
BurpSuite
Accunetix, sqlmap,… (không nên dùng)

Nơi để học: Tự luyện Google.com
http://sting8k.github.io/ctf-lam-the-nao-de-bat-dau-voi-ctf-mang-web/

Các trang để luyện tập: ctftime.org, https://www.root-me.org/?page=preferences&lang=en, webhacking.kr

Cryptography

Giải mã dữ liệu bị mã hóa

Base64, Ceasar,Encode-hex

RAS, ECC, DES, AES

Các loại mã hóa do người dùng tự đặt ra

Sage-Math (Mathemratical Software System) (khả năng tính toán cao, cài lên local để brute force)

Binary Explotation (Pwnable)

Trùm của mọi trùm (khó) Pwnable là thượng đẳng:

Định luật murphy

Tìm lỗi, khai thác các lỗ hổng trong các ứng dụng server, phần mềm, hoặc các đoạn mã

Mục đích cuối cùng là get được shell,

Netcat vào, chiếm được quyền, Get shell, lấy được bí mật

Điều gì có thể xảy ra xấu, nó sẽ xảy ra xấu như vậy

học GDB, code python và pwn tool, secure shell ở chrome, …

pwnable.tw

Reverse Engineering

Dịch ngược mã nguồn phần mềm, unpack các packer bảo vệ mã nguồn

Gdbm IDA, OllyDBG, Objdump, …

IIspy (.NET)

JD-Gui (Java), FFDec (Android)

kiemmanowar.blogspot.com