Legend Rat v1.3


DOWNLOAD

9 Bước tấn công 1 server


9 Bước tấn công 1 server

✨ #Quá trình tôi đọc sách. Mà tôi nghĩ 9 bước khi bạn xâm nhập vào 1 hệ thống. Lúc đầu tôi cũng lan man khi hack vào 1 hệ thống. Đâu phải hệ thống nào cũng lỗi SQLI,XSS,IIS...etc, để dễ dàng bạn log vào đâu. Nên đây là 9 câu thần chú khi xâm nhập hệ thống.

Chrome Extensions for Testers



Tiện ích của chrome cho kiểm thử – Web UI testing

Screen Ruler
– Screen Ruler là tiện ích đơn giản của chrome hiển thị chính xác thước đo. Sử dụng Screen Ruler trong khi test, bạn có thể đo chiều dài, chiều rộng, padding của đối tượng bằng cách đơn giản là đặt chúng dựa trên tiêu chí mà mình muốn kiểm tra. Screen Ruler thực sự hữu ích để kiểm tra Web UI vì nó giúp ta log các lỗi không nhìn thấy và đảm bảo ứng dụng web sẽ hoàn hảo trên từng pixel.

WhatFont – Là một tester, chúng ta cũng cần kiểm tra vấn đề thẩm mỹ như font chữ và kích thước font được sử dụng cho từng vùng cụ thể trên trang web. WhatFont là một tiện ích đơn giản. Đúng như tên gọi của nó, nó giúp ta dễ dàng tìm được font của trang web. Chỉ cần di chuột vào vùng bạn muốn biết font trên một trang web, WhatFont sẽ đưa ra font được sử dụng. Nếu bạn cần thêm thông tin về các service dùng cho web font, WhatFont cũng sẵn sàng đáp ứng.

ColorZilla – ColorZilla là một tiện ích của chrome về chọn màu sắc. Nó cho phép bạn tìm ra chính xác màu sắc đã được sử dụng trên trang web. ColorZilla thực sự rất hữu ích khi bạn cần kiểm tra màu sắc của web có khớp với design hay không.

PerfectPixel
– Nếu bạn là một tester mong muốn ứng dụng mình test hoàn hảo đến từng pixel so với design thì tiện ích này chính là dành cho bạn! Bạn có thể đặt bức ảnh trong suốt phủ lên bề mặt trang web sau đó so sánh từng pixel.

IE Tab – IE tab là một giả lập trình duyệt IE phổ biến nhất. Sử dụng IE Tab, bạn có thể test các trang web với các phiên bản khác nhau của IE mà không cần phải xa trình duyệt Chrome yêu thích của bạn.

Spell Checker – Spell Checker không thực sự chỉ giống như tên gọi của nó. Nó kiểm trả chính tả cho tất cả các từ trên trang web và gợi ý cách sửa cho những từ bị lỗi. Nó là một tiện ích đơn giản, hỗ trợ đến 12 ngôn ngữ. Bạn có thể thêm những từ của riêng bạn vào trong từ điển.

Grammarly – Grammarly là tiện ích quá tuyệt giúp bạn bất cứ khi nào bạn viết mail, bình luận hoặc blog post online với vai trò của một người hiệu chỉnh. Khi bạn viết, Grammarly kiểm tra chính tả và lỗi ngữ pháp, highlight chúng mà không cần phải thoát trình duyệt. Đối với kiểm thử, Grammarly là tiện ích miễn phí mang lại khả năng kiểm tra ngữ pháp chính xác cho chính trình duyệt Chrome của bạn.

Tiện ích của chrome cho kiểm thử – Tự động

Web Developer – Web developer, cũng có một add-on cùng tên trên Firefox , cung cấp một loạt các tính năng cho web developer trên thanh công cụ. Nó không có đầy đủ tính năng như trên Firefox counterpart nhưng vẫn là một trong các tiện ích hữu dụng nhất của chrome cho kiểm thử. Bạn có thể quản lý bộ nhớ cache của trình duyệt, quản lý cookies, kiểm tra và highlight các thành phần của web, tiêu đề của thuộc tính, các thông tin khác trên trang web, giúp tiết kiệm thời gian trong khi test.

Firebug Lite – Firebug Lite là một tiện ích khác cho việc kiểm thử. Nó không thay thế các tùy chọn mà công cụ phát triển của chrome cung cấp, nhưng vẫn rất tuyệt khi sử dụng. Nó cung cấp cái nhìn trực quan cho các phần tử HTML, DOM, và mô hình dưới dạng khối hộp. Bạn có thể sử dụng nó để kiểm tra các thành phần HTML tại các nút bấm khi click.

Tiện ích của chrome cho kiểm thử – Bằng chứng test

Bằng chứng test là rất quan trọng vì vậy có một công cụ tốt cho phép chúng ta chụp lại màn hình và ghi chú các vấn đề dễ dàng sẽ tiết kiệm một lượng lớn thời gian.

Awesome Screenshot
– Awesome Screenshot là công cụ chụp màn hình phổ biến nhất với các tester. Bạn có thể chụp full màn hình, một vùng cụ thể hoặc nội dung nhìn thấy trên trang web, đồng thời chú thích màn hình chụp bằng cách highlight, cắt, thêm text … để làm bằng chứng test. Bạn có thể dễ dàng chia sẻ các bức ảnh đó, có thể lưu vào máy tính cá nhân, lưu tạm trên Awesome Screenshot hoặc lưu trữ lâu dài bằng cách upload lên Google Drive hoặc Diigo.

Lightshot – Lightshot là một công cụ chụp lại màn hình và tùy biến bằng cách thêm các ghi chú. Nó có giao diện khá đơn giản. Bạn có thể lưu các screenshot vào bộ nhớ local hoặc upload chúng lên cloud (bạn có thể chia sẻ link cho người khác).

Screencastify – Một tiện ích khác nên có trong bộ công cụ của tester. Screencastify là một tiện ích ghi lại màn hình cho chrome. Nó cho phép ghi lại hành vi của người dùng trên trang web như một video. Bạn có thể chia sẻ với developer như là bằng chứng test. Chỉ cần nhấn ghi là nội dung các tab của bạn sẽ được ghi lại.

Tiện ích của chrome cho kiểm thử: Kiểm tra cookie của website

Quản lý được cookie và cache của trình duyệt là vô vùng quan trọng để đảm bảo ứng dụng hoạt động như mong đợi và lấy dữ liệu đúng như trên server. Bạn có thể sử dụng các tiện ích này cho việc kiểm tra cookie của website vì nó cho phép ta thêm, xóa, sửa cookie và xóa bộ nhớ cache của trình duyệt.

Edit This Cookie – Nếu bạn đang test phiên bản A/B của ứng dụng web, tiện ích này sẽ giúp bạn tiết kiệm rất nhiều thời gian. Edit This Cookie cung cấp một giao diện đẹp, có tính tổ chức cho phép bạn quản lý cookie của trình duyệt giống như một người chuyên nghiệp. Nó biểu diễn tập các tệp cookie và giá trị của nó. Bạn có thể thay đổi bất cứ giá trị hiện tại nào hoặc thêm, xóa, tìm kiếm, bảo vệ hoặc block cookie. Sử dụng tiện ích này bạn sẽ thấy dễ dàng hơn thay vì sử dụng màn hình setting của chrome để tìm kiếm cookie cho một trang cụ thể.

Cookie Editor – Cookie Editor là một tiện ích khác cho phép bạn sửa cookie trong quá trình test như thêm, xóa, thay đổi, bảo vệ, block và tìm kiếm cookie. Nó cũng có khả năng export cookie thành file JSON.

Clear Cache
– Nếu bạn gặp khó khăn khi muốn xóa cache của trình duyệt thì tiện ích này sẽ giúp bạn xóa từ thanh công cụ mà không phải đi đường vòng (Settings -> xóa dữ liệu trình duyệt). Bạn có thể tùy biến nó để kiểm soát dữ liệu bạn muốn xóa – app cache, download, file hệ thống, form dữ liệu lịch sử trình duyệt, bộ nhớ cục bộ, mật khẩu, …

Cache Killer – Cache Killer là một plugin hữu dụng cho tester. Nó cho phép dễ dàng vô hiệu hóa cache trong Chrome. Không giống như Clear Cache, khi nó cho phép xóa cache trước khi load một trang để bạn luôn luôn thực hiện bản mới nhất của code. Nếu bạn đang kiểm tra cache của ứng dụng, bạn có thể vô hiệu hóa add-on này chỉ với một cú click.

Tiện ích của chrome cho kiểm thử – Mô phỏng kích thước màn hình khác nhau

Resolution Test – Resolution Test giúp dễ dàng test các ứng dụng web trên các màn hình có độ phân giản và kích thước khác nhau. Bạn có thể chọn từ danh sách các màn hình có độ phân giải phổ biến nhất mà các website hay dùng, hoặc sử dụng kích thước tự tùy biến. Nó tạo ra các kích cỡ màn hình cửa sổ trình duyệt và mô phỏng ứng dụng web trong kích thước màn hình bạn muốn.

Window Resizer
– là một tiện ích của chrome rất hữu ích trong kiểm thử ứng dụng web. Nó làm mọi thứ cho Chrome giống như những thứ mà Firesizer làm cho Firefox – thay đổi kích thước cửa sổ trình duyệt để mô phỏng các độ phân giải màn hình khác nhau cho phép bạn kiểm tra layout của website sẽ thay đổi như thế nào trên các kích thước màn hình khác nhau. Bạn có thể chọn từ các độ phân giải màn hình đề xuất hoặc thêm các độ phân giải màn hình mà bạn tự tạo ra (và lưu chúng). Một vài chức năng Window Resizer có mà Resolution Test không có là Window Resizer cho phép bạn thiết lập tùy biến các phím tắt quan trọng và bạn cũng có thể export các thiết lập đó và import vào một máy tính khác để sử dụng.

Tiện ích của Chrome cho kiểm thử – Test khám phá

Bug Magnet – Bug Magnet là một sự lựa chọn tiết kiệm thời gian khổng lồ khi test khám phá. Click chuột phải vào bất cứ trường nào trên ứng dụng web để đưa ra một menu với các giá trị được xác định trước cho email, tên, số điện thoại, postcode,… Chọn giá trị mà bạn muốn và điền vào trường trên trang web. Vì vậy, nếu sắp tới bạn có kế hoạch thực hiện test khám phá, bạn không cần phải làm giả giá trị để test thử các trường vì Bug Magnet sẽ làm việc đó cho bạn. Hãy thử một lần, và bạn sẽ sử dụng nó mỗi ngày.

Form Fuzzer – Form Fuzzer là một tiện ích khác của chrome để kiểm tra các trường điền dữ liệu với các giá trị khác nhau và cực kỳ có ích cho việc test khám phá. Giống như Bug Magnet, bạn không cần phải tạo dữ liệu để kiểm tra định dạng khác nhau của địa chỉ email, số điện thoại… một cách thủ công khi kiểm thử các form. Chỉ cần click chuột phải vào form mà bạn muốn điền và chọn giá trị mong muốn đã được thiết lập trước.

Web Developer Form Filler – Tiện ích này giúp việc điền các trường của form và chứng minh tính hữu dụng trong khi test khám phá. Bạn có thể cài đặt các phím nóng để điền vào form sử dụng duy nhất một key.

Tiện ích của Chrome cho test API

Postman
– Postman Chrome Extension là công cụ cho việc kiểm thử API – đặc biệt là API RESTful. Nó cung cấp khả năng thiết lập và tạo biến môi trường giúp tiết kiệm thời gian. Bạn có thể yêu cầu kiểm tra nhóm các yêu cầu API trong một lần.

Advanced RESTClient
– Advanced RESTClient là một tiện ích khác của chrome cho việc kiểm tra API. Nó không có nhiều tính năng như Postman nhưng nó cũng khá tuyệt để bắt đầu cho việc kiểm thử API. 
REST Client cho phép bạn tạo và kiểm thử tùy biến yêu cầu API với giao diện đơn giản.

Resteasy – Resteasy là một tùy chọn khác để testing RESTful API trên Chrome. Nó cung cấp các tính năng tương tự Advanced RESTClient, vì vậy bạn có thể thử cả hai và chọn tiện ích nào mình thích hơn.

JSONView – Nếu bạn đang kiểm thử RESTful API, nếu đọc dữ liệu JSON gặp khó khăn thì JSONView cho phép bạn xem định dạng JSON dưới dạng cây trong trình duyệt Chrome giúp dễ đọc và verify hơn.

Ghostery – Tiện ích này giúp dễ dàng hơn khi kiểm tra ứng dụng chạy như thế nào khi mạng chậm và API bị lỗi thì có kết quả gì. Nó cho phép bạn nhìn tất cả trackers trên trang web và cung cấp tùy chọn vô hiệu hóa một tracker cụ thể nào đó.

Tiện ích của Chrome cho cho kiểm thử bảo mật

XSS Rays – XSS Rays là một tiện ích hữu ích của chrome được sử dụng rộng rãi trong cộng đồng tester cho kiểm thử bảo mật. Nó giống như máy quét Javascript XSS giúp ta xác định các lỗ hổng XSS trong trang web. XSS Rays phân tích tất cả các link và form của trang web khi nó được load và kiểm tra XSS trên các parameter GET, POST.

Request Maker – Request Maker giúp bạn tạo các request mới, bắt các request tạo bởi trang web, xáo trộn URL, sửa đổi tiêu đề và dữ liệu POST. Tính năng tôi thích nhất của Request Maker là việc đánh dấu các request bằng việc click vào một button. Nó giúp tiết kiệm rất nhiều thời gian.

d3coder – d3coder là một tiện ích khác của chrome cho test bảo mật. Bạn có thể mã hóa và giải mã văn bản đã chọn thông qua ngữ cảnh đã được thêm vào ở Chrome. Copy text vào clipboard và chọn một trình chuyển ngữ cảnh từ menu. Sau khi chuyển đổi, d3coder sao chép text mới vào clipboard. d3coder là plugin tuyệt với cho test bảo mật cho phép mã hóa/ giải mã các loại khác nhau như base63, ROT13, CRC32, UNIX.

Site Spider – Sit
e spider là một trang crawler mà báo tất cả các link bị hỏng của trang web thay vì bạn phải tự kiểm tra bằng tay. Site Spider là mã nguồn mở vì vậy bạn có thể thay đổi khi bạn muốn.

Tiện ích của Chrome cho Accessibility Testing

Có rất nhiều chuẩn (WCAG, ARIA, RGAA, Section 508) đã định nghĩa cách để làm cho nội dung của Web và ứng dụng web càng ngày càng dễ tiếp cận với mọi người. Những tiện ích sau của Chrome có thể được sử dụng cho kiểm thử tiếp cận để đảm bảo các chuẩn này được đáp ứng.

WAVE Evaluation Tool – WAVE là một công cụ đánh giá khả năng tiếp cận web tuyệt vời được sử dụng để kiểm tra web dựa trên chuẩn WCAG. Công cụ WAVE Evaluation thêm khả năng WAVE cho trình duyệt của bạn và cung cấp cái nhìn trực quan cho kết quả phản hồi về khả năng tiếp cận của trang web bằng cách truyền các icon và indicator vào trang web.

Accessibility Developer Tools – Đây là tiện ích thêm khả năng Accessibility audit và Accessibility sidebar pane trong các tab thành phần trong công cụ cho developer và thực sự là một phần công cụ cốt lõi trong chrome. Khi bạn chạy Accessibility audit, nó sẽ liệt kê các luật mà trang web vi phạm theo WCAG 2.0 Guidelines, bao gồm thiếu thuộc tính ARIA.

aXe
– aXe là một tiện ích khác cung cấp thêm khả năng kiểm tra khả năng tiếp cận tự động cho trình duyệt Chrome. Nó là tiện ích lightweight dựa trên thư viện Javascript aXe. aXe báo lỗi cho tất cả những sai sót dựa theo WCAG 2.0 (W3C Web Content Accessibility Guidelines) và Section 508 (US Federal Procurement Standard – Chuẩn của liên bang Mỹ).

ARIA Validator – ARIA Validator thêm một nút vào Chrome để xác nhận việc thực hiện ARIA trên trang web bất kỳ. Đối với mỗi frame nó có thể đọc trên trang web, nó sẽ mở một tab mới để hiển thị lỗi và warning.

Các tiện ích của Chrome để nâng cao hiệu suất

Session Manager
– Là một tester, bạn sẽ thường xuyên truy cập vào một số trang web nhất định mỗi ngày. Vì vậy, Session Manager cho phép bạn tạo ra một nhóm các trang web mà bạn có thể mở chỉ bằng một cú click. Tất cả chỉ trong một lần, nghe thật tuyệt phải không? Với Session Manager, bạn có thể quản lý các tab – lưu, cập nhật, xóa và restore tập các tab. Sử dụng nó và bạn sẽ không bao giờ hối hận.

iMacros – iMacros là tiện ích của chrome giúp bạn dễ dàng hơn khi test các trang web. Nó cho phép bạn ghi lại và phát lại các hành động của bạn trên trang web. iMacros có thể được sử dụng để tự động hóa các công việc hàng ngày đơn giản của bạn như smoke test mỗi ngày. Bạn có thể sử dụng iMacros để mở một nhóm các trang web để tiết kiệm thời gian.

MindMup
– Mindup là add-on tuyệt vời cho phép bạn tạo sơ đồ tư duy miễn phí. Sơ đồ tư duy là cách hay để tổ chức lại sự hiểu biết của bạn về các luồng ứng dụng, viết ra các kịch bản khác nhau và thậm chí tìm ra sự phụ thuộc giữa các thành phần của hệ thống. MindMup cung cấp cho bạn khả năng thực hiện chính xác những việc đó mà không phải thoát khỏi trình duyệt. Bạn có thể tạo sơ đồ tư duy và cùng thực hiện với những người khác trong thời gian thực với giao diện đơn giản và gọn gàng. Nó được tích hợp với Google Drive và Dropbox. Bởi vì sơ đồ tư duy của bạn được lưu trên đám mây, bạn có thể truy cập bất cứ đâu – trình duyệt trên máy để bàn, máy tính bảng hoặc thiết bị di động.

Proxy SwitchySharp – Proxy SwithchySharp giải cứu bạn trong trường hợp bạn cần phải chuyển proxy thường xuyên. Nó cho phép bạn quản lý và chuyển đổi giữa nhiều proxy nhanh chóng và dễ dàng. Tính năng mà tôi thích nhất là bạn có thể tự tạo các quy tắc cho proxy chuyển tự động, kích hoạt một proxy cụ thể cho một URL cụ thể. Sử dụng Proxy Swithcher, bạn có thể ẩn địa chỉ IP.

Tấn công từ chối dịch vụ: Botnet


Botnet - Sơ lược lịch sử

- Cuối thế kỷ 19 cũng như đầu thiên niên kỷ mới đánh dấu bước phát triển nhanh, mạnh của một số chiến lược tấn công khác biệt nhắm vào hệ thống mạng. DDoS, tức Distributed Denial of Services, hình thức tấn công từ chối dịch vụ phân tán khét tiếng ra đời. Tương tự với người anh em DoS (tấn công từ chối dịch vụ), DDoS được phát tán rất rộng, chủ yếu nhờ tính đơn giản nhưng rất khó bị dò tìm của chúng. Đã có nhiều kinh nghiệm đối phó được chia sẻ, với khối lượng kiến thức không nhỏ về nó, nhưng ngày nay DDoS vẫn đang là một mối đe doạ nghiêm trọng, một công cụ nguy hiểm của hacker. Chúng ta hãy cùng tìm hiểu về DDoS và sản phẩm kế thừa từ nó: các cuộc tấn công botnet.

Tấn công từ chối dịch vụ: DRDoS



DRDoS (Distributed Reflection Denial of Service)

1 – Giới thiệu DRDOS.

- Xuất hiện vào đầu năm 2002, là kiểu tấn công mới nhất, mạnh nhất trong họ DoS.

- Nếu được thực hiện bởi kẻ tấn công có tay nghề thì nó có thể hạ gục bất cứ hệ thống nào trên thế giới trong phút chốc.

- DRDoS là sự phối hợp giữa hai kiểu DoS và DDoS.

- Mục tiêu chính của DRDoS là chiếm đoạt toàn bộ băng thông của máy chủ, tức là làm tắc nghẽn hoàn toàn đường kết nối từ máy chủ vào xương sống của Internet và tiêu hao tài nguyên máy chủ.

- Ta có Server A và Victim, giả sử ta gửi 1 SYN packet đến Server A trong đó IP nguồn đã bị giả mạo thành IP của Victim. Server A sẽ mở 1 connection và gửi SYN/ACK packet cho Victim vì nghĩ rằng Victim muốn mở connection với mình.

Tấn công từ chối dịch vụ: DDoS


1 - Giới thiệu DDoS :




Trên Internet tấn công Distributed Denial of Service (DDoS) hay còn gọi là Tấn công từ chối dịch vụ phân tán là một dạng tấn công từ nhiều máy tính tới một đích, nó gây ra từ chối các yêu cầu hợp lệ của các user bình thường. Bằng cách tạo ra những gói tin cực nhiều đến một đích cụ thể, nó có thể gây tình trạng tương tự như hệ thống bị shutdown.

Tấn công từ chối dịch vụ: DoS



Tấn công từ chối dịch vụ (DoS)

1 - Giới thiệu về DoS

- Tấn công DoS là một kiểu tấn công mà một người làm cho một hệ thống không thể sử dụng, hoặc làm cho hệ thống đó chậm đi một cách đáng kể với người dùng bình thường, bằng cách làm quá tải tài nguyên của hệ thống .

Kinh nghiệm lập trình, cảnh giới lập trình




Phần một. Kinh nghiệm


Nói tới kinh nghiệm thì mỗi người có những kinh nghiệm khác nhau. Những người giỏi thật sự thì có lẽ họ ít chia sẻ kinh nghiệm tối cao (vì đó là cái làm nên giá trị riêng mỗi người) mà thường họ chia sẻ những kinh nghiệm phổ biến. Bản thân tôi cũng vậy, nhưng trong bài viết này tôi chia sẻ những quan niệm hơi khác người một chút.

1. Nội lực trong ngành CNTT

Để học tốt trong ngành CNTT, bạn phải có đủ 5 yếu cốt căn bản cốt lõi sau 1. Tư duy. 2. Kỹ năng IT (biết nhiều phần mềm, cài đặt máy tính, dual-boot, diệt virus bằng tay, v.v). 3. Kiến thức chuyên môn (lập trình, Toán học, Vật lý,…). 4. Đam mê. 5. Ngoại ngữ (tiếng Anh).5 yếu tố trên gộp lại thành 1 thứ gọi là “cốt cách”, “tư chất”. Điều này giải thích một chuyện mà bạn thường hay thấy: có vài bạn học lập trình suốt 2 năm liền mà trình độ không bằng được vài bạn học lập trình trong…vài tháng. Đơn giản là sự khác nhau ở “tư chất” và sự cần cù kiên trì mỗi người.Để giải thích 5 yếu tố trên vừa dễ mà vừa khó. Dễ là vì bạn nào đọc cũng hiểu cả. Khó là vì để cho bạn hiểu đúng được ý nghĩa sâu xa thì không phải đơn giản.

Bạn có thể hiểu như vầy: giả sử 4 yếu tố đầu tiên bạn rất giỏi, nhưng bạn không giỏi yếu tố cuối cùng (tiếng Anh). Vì vậy mà bạn không thể leo lên mức cảnh giới thượng thừa mà mãi mãi bị giới hạn ở 1 mức nào đó. Bạn chỉ đạt cảnh giới cao khi nội lực đầy đủ. Lưu ý: 5 yếu tố trên đây chỉ là “tư chất”, muốn phát huy được “tư chất” để đạt được thành công thì bạn phải rèn luyện, kiên trì và cần có nhiều yếu tố khác (thậm chí là cả may mắn). Nếu rèn luyện tốt tư chất thì bạn có thể học giỏi bất cứ lĩnh vực nào trong ngành CNTT chứ không phải riêng về lập trình.

2. Copy code

Thường thì đa số các bài viết chia sẻ kinh nghiệm họ đều nói rằng không được phép copy code của người khác, copy code là ngu, là gà, copy code là vô đạo đức, v.v. Dĩ nhiên tôi đồng ý hoàn toàn, vì “copy code” đối với đa số người là “lấy code của người khác mang về làm bài làm của mình”.Còn với tôi, thì quan niệm “copy code” đúng với ý nghĩa thuần túy của nó: “copy một đoạn code từ tài liệu, sau đó dán vào bài của mình, chạy thử”. Vậy thì điều đó có gì khác nhau ? Rất khác. Khi tôi tìm kiếm tài liệu, chạy thử code, để tiếp thu nhanh nhất thì tôi phải copy code thấy được kết quả ngay, dễ dàng hình dung ra vấn đề. Điều này rõ ràng tốt hơn việc “gõ code từ từ (không copy) để hiểu từng câu lệnh, gõ quá trời quá đất, chạy thử, ôi mẹ ơi 69 lỗi, thiếu thư viện tè le, biết vậy khỏi gõ code chi cho mệt người tốn sức”.Khi tôi “copy code” thuần túy, tôi sẽ thấy ngay kết quả, điều đó tạo động lực và cảm hứng, từ đó bắt đầu chạy debug từ từ, dần dần hình dung ra vấn đề và hiểu được, sử dụng được. Đó là 1 trong những bí kíp tối thượng của tôi khi học lập trình.

3. Nhìn xa trông rộng

Nghe có vẻ khá là hoa mỹ nhưng thực tế là vậy.Khi làm một đồ án (bài tập siêu lớn), các bạn của tôi thường hay nhào vào code ngay, code được chức năng nào hay chức năng đó để kiếm điểm. Còn tôi thì không.Tôi dành đến gần 50% thời gian làm đồ án cho sự chuẩn bị, chuẩn bị về mọi thứ. Tôi học những công nghệ liên quan đồ án, tìm hiểu kĩ các hàm, code thử vài tính năng nho nhỏ để hiểu. Sau đó tôi bắt đầu lên ý tưởng, thiết kế hệ thống class (phương pháp lập trình Hướng đối tượng). Tôi phải thiết kế làm sao mà phải mở rộng được tối đa các chức năng. Ví dụ đồ án yêu cầu chức năng vẽ hình cơ bản, nhưng tôi thiết kế làm sao mà có thể dễ dàng mở rộng ra thành “vẽ hình phức tạp, vẽ hình mà chèn thêm được chữ”.Giai đoạn đầu rất mệt, phải liên tục điều chỉnh cho hoàn thiện, nhưng bù lại khi cái lõi đã xong, thì giờ đến lúc tôi sướng, bạn tôi khổ. Bạn tôi khổ vì nhào vào code liền, giờ code như 1 đống rác đọc chả hiểu gì (xin lỗi, dùng từ hơi xúc phạm), vì code miễn sao ra đúng chức năng là ok nên “làm được trước đã rồi tính tiếp”. Và vì vậy bạn tôi thường sẽ bị bế tắc về sau. Còn tôi thì giai đoạn sau rất thoải mái, mở rộng tính năng tối đa, giựt điểm về ngon lành. Tôi cũng rất tự hào vì điểm đồ án #1 của tôi là cao nhất lớp (tiến độ 1, còn tiến độ còn lại thầy chưa chấm chưa biết).Mấu chốt quan trọng ở đây là phải biết nhìn xa trông rộng, và nền tảng đó là cấu trúc dữ liệu và giải thuật, phương pháp lập trình Hướng đối tượng, tư duy Hướng đối tượng. Dùng các mẫu thiết kế Hướng đối tượng làm cho code của mình hay hơn, chuyên nghiệp hơn.Tất nhiên, còn nhiều kinh nghiệm khác, nhưng đó là những giá trị không-miễn-phí :).

Phần hai. Cảnh giới lập trình

Nhằm đơn giản hóa vấn đề, mọi code minh họa trong bài sử dụng ngôn ngữ C/C++.
Cảnh giới 1. Nhập môn (beginner)

Mới bước vào ngành CNTT và lập trình thì ai ai cũng phải “nhập môn”, làm quen. Vì vậy mà nhiều khi code rất là trẻ trâu. Code đọc khó hiểu, tệ hơn là thụt dòng loạn xạ không có quy tắc.
Cảnh giới 2. Biết sử dụng hàm, thư viện chuẩn có sẵn

Có một điều trớ trêu thay là dù bạn học các ngành về khoa học kĩ thuật hay là về khoa học xã hội, thì vẫn len lỏi đâu đây một yếu tố gọi là “học thuộc lòng”.Tất nhiên, với các ngành khoa học xã hội thì điều đó dễ dàng nhận ra, môn Văn chẳng hạn, học bài phát điên luôn. Còn với khoa học kĩ thuật thì sao ? Liệu có học bài không ?Với quan điểm của tôi, một trong những bước đệm để bạn giỏi lên là phải học thuộc càng nhiều hàm, càng nhiều thư viện càng tốt, giống như học từ vựng tiếng Anh ấy. Điều này đôi khi nghe có vẻ phi lý, vì sao ta lại học thuộc lòng ?Đơn giản vì ta đang muốn giải quyết nhanh một vấn đề, sao ta lại tốn công sức viết thủ công các hàm trong khi thư viện đã có sẵn, gọi 1 phát là xong ? Ta sẽ tiết kiệm được thời gian, công sức để tập trung vào vấn đề chính nhiều hơn. Nhiều khi mình lo viết hàm phụ mà hàm phụ bị lỗi, gây rối, mất tập trung, xuống tinh thần.Ghi chú: chỉ khi bạn vững thuật toán cơ bản thì mới xài hàm để tiết kiệm thời gian.

Lấy ví dụ minh họa: kiểm tra xem một số nguyên dương có phải số đối xứng hay không. Ví dụ như số 121 là số đối xứng, số 123 thì không phải, số 9009 là số đối xứng, v.v
Cảnh giới 3. Tinh thông hàm, thư viện, nguyên lý

“Tinh thông” hoàn toàn khác với chuyện “biết biết một chút”.

Khi bạn hiểu rõ được cú pháp các hàm xử lý, bạn sẽ dễ dàng ứng dụng nó để xử lý bài toán tốt nhất. Lấy lại ví dụ “xác định số đối xứng”. Khi bạn chưa hiểu rõ hàm strcmp, strrev, strcpy thì bạn chỉ hiểu đơn giản là nó giúp mình làm cái này, cái kia. Nhưng khi bạn hiểu rõ được cú pháp của hàm đó, nguyên lý xử lý của hàm đó, thì bạn có thể áp dụng để làm cho code mượt mà hay hơn như hình ở trên.
Cảnh giới 4. Cấu trúc dữ liệu và thuật toán

Đây là một lợi thế của những bạn từng học “đội tuyển Tin học” đi thi Học sinh giỏi cấp tỉnh, thành phố/quốc gia/Olympic. Bạn sẽ ứng dụng những cấu trúc dữ liệu & thuật toán để giải quyết một vấn đề ở mức độ tối ưu (tối ưu về tốc độ là chính).Có những thứ ở cuộc sống rất là trừu tượng, khi mang nó vào biểu diễn trong lập trình thì phải nói là 1 thảm họa khủng khiếp, vì bình thường ta chỉ khai báo các biến, sử dụng các hàm có sẵn để xài, vậy thôi.Ví dụ: hệ thống bản đồ. Làm sao mà các lập trình viên có thể mô phỏng lại bản đồ trên máy tính, và có thể giúp ta tìm đường đi ngắn nhất giữa 2 địa điểm nào đó ? Google Maps là 1 ví dụ rất điển hình. Nếu ta chỉ khai báo biến, sử dụng các hàm có sẵn như nhập số, tách chuỗi, ghép chuỗi, v.v thì liệu có thể làm được điều này ?Nhờ những cấu trúc, dữ liệu cơ bản như số nguyên, số thực, mảng, v.v người ta kết nối chúng, tập hợp lại (trong struct, class) rồi áp dụng một quy tắc hoạt động đặc biệt, vậy là có thể hình thành nên 1 cấu trúc dữ liệu. Từ đó giúp ta giải quyết vấn đề cực kì hay và ngọt, mà lại hiệu quả nữa.Đi kèm với cấu trúc dữ liệu, đó là thuật toán. Cấu trúc dữ liệu quyết định thuật toán. Thuật toán giúp bạn tư duy tốt hơn. Bạn cần phải luyện tập nhiều với thuật toán.

Vì vậy nên, để đạt đến một cảnh giới cao hơn, nhìn mọi vật, mọi sự việc khác người bình thường, thì nhất định bạn phải tinh thông cấu trúc dữ liệu và thuật toán
Cảnh giới 5. Phương pháp lập trình Hướng đối tượng

Cảnh giới được nâng lên tối thượng hay không cũng là nhờ phương pháp lập trình Hướng đối tượng.

Khi có tư duy lập trình Hướng đối tượng, bạn sẽ nhìn mọi vật, mọi sự việc lên 1 tầm cao mới, khác xa với con mắt của người bình thường (giống như cảnh giới trước đó á).Phương pháp lập trình Hướng đối tượng (PP LT HĐT) giúp bạn tiết kiệm thời gian, công sức, tái sử dụng code, mở rộng phần mềm. Nếu áp dụng tốt phương pháp lập trình HĐT và cấu trúc dữ liệu/thuật toán thì bạn có thể nói là rất vững cơ bản rồi đó :)P/S: những thứ bạn học PP LT HĐT từ nhà trường, hay là từ video dạy học trên mạng đa số đều rất là tầm thường (nói hơi xúc phạm tí nhưng thực tế là vậy). Bạn đừng nghĩ rằng chỉ học mỗi hàm thành viên (phương thức), kế thừa, rồi đa hình, virtual này nọ thì đã gọi là học xong, nhưng thứ đó đều rất cơ bản. Những cảnh giới cao ở PP LT HĐT còn rất nhiều, cố gắng nhìn lên trên và áp dụng vào những project lớn thì mới nâng tầm được.
Cảnh giới 6. Engine, framework, thư viện, đa nền tảng

Khi học, bạn học từ dưới đáy lên cao thì mới có thể đạt được cảnh giới. Khi bạn học ở trên rồi bạn đào sâu xuống dưới thì thường rất khó và gần như không thể.5 cảnh giới trước là bạn đang ở đáy, và đến cảnh giới này là bạn bắt đầu học lên mức “ứng dụng thực tế”. Bạn sử dụng các engine, framework, thư viện có sẵn để làm nên 1 chương trình hoàn thiện, có giao diện đàng hoàng, tung ra ngoài thị trường. Bạn có thể va chạm nhiều với MVC, MVVM, XML, database, v.vTưởng tượng như 5 cảnh giới trước là bạn luyện nội công vững vàng, thì ở cảnh giới này bạn học ngoại công để thể hiện ra ngoài. Khi có nội công vững, ngoại công tốt thì thiên hạ nhìn vào biết bạn là cao thủ, thiên hạ khiếp sợ.

Còn với những bạn chưa có nội công tốt mà đã lo vội thể hiện thì thật là thảm họa. Ví dụ như có những bạn lo làm game Flappy Bird, bạn dễ dàng làm được game này nhưng chỉ là phần đồ họa bên ngoài. Chỉ khi bạn học Vật lý, hiểu được công thức rơi tự do (của con chim) thì bạn mới mô phỏng được chính xác chim đang bay, đó là nội công đó bạn. Hay hơn nữa là bạn lập trình trí tuệ nhân tạo cho con chim tự bay, né các ống cống, đây mới gọi là giỏi.Tưởng tượng: một người chưa có nội lực, nhưng mà được học chút võ công bên ngoài (ngoại công), khi múa võ sẽ làm cho nhiều kẻ sĩ sợ hãi, nhưng mà khi gặp cao thủ chưởng 1 phát là bẹp dí luôn. Còn nếu một người có nội lực mà chưa có ngoại công, lỡ bị cao thủ chưởng thì có thể “ráng chịu đựng đi gặp thầy thuốc chữa trị”. Có nội lực mà còn thêm ngoại công pro thì thôi khỏi nói rồi.Một số bạn học sâu thì lại có quan niệm khác. Các bạn học sâu thì đào xuống phía dưới chớ không lên trên, bạn sử dụng các thư viện xử lý thread, xử lý va chạm Vật lý chẳng hạn. Đó cũng là một điều tốt. Xa hơn nữa là bạn tính toán chuyện đa nền tảng. Làm sao bạn viết code 1 lần mà biên dịch được trên nhiều nền tảng Windows, Android, iOS, Linux,… (với ngôn ngữ C/C++ chẳng hạn) ???Cơ bản nhất là sử dụng macro. Sau đây tôi sẽ minh họa khi bạn đạt cảnh giới macro. Tôi sẽ lấy lại ví dụ về việc “nhập vào một số nguyên dương, kiểm tra xem đó là số đối xứng hay không”.

Ở cảnh giới này thì đồng thời bạn đã biết sử dụng các thư viện bên ngoài, biết cách link thư viện với project, biết tạo DLL, LIB và sử dụng chúng. Thường bạn sẽ chìm đắm rất lâu trong cảnh giới này vì ham mê thể hiện và học quá nhiều thứ =))
Cảnh giới 7. Phong cách lập trình

Lên đến cảnh giới này, bạn bắt đầu chăm chú cho code mình được đẹp hơn, ưu việt hơn, dễ đọc hơn. Tưởng tượng: bạn viết 1 đống code cả ngàn dòng rất là cao siêu, sau 1 năm bạn đọc lại code mình bạn còn hiểu không ?Khoảng trắng giữa các thành phần là quan trọng. Bạn cần tách ra rõ ra phần nào ra phần đó. Ví dụ bạn khai báo biến, sau đó nhập dữ liệu, sau đó xử lý, và xuất ra kết quả. Vậy thì: nên có thêm khoảng trắng giữa 4 thành phần trên.Đó là chưa kể có cách viết code như sau:

Câu hỏi: liệu có sự khác biệt nào giữa 2 đoạn code trên không ?

Xét về mặt vật lý thì câu trả lời là KHÔNG, đều giống như nhau hoàn toàn. Xét về mặt tư duy: có 1 sự khác biệt rất lớn về đẳng cấp. Vì sao vậy ?Giả sử ta quên đi 1 dấu ‘=’ trong biểu thức ở lệnh if.Với cách 1 ta có thể nhầm lẫn if (x = 0) (thiếu đi 1 dấu ‘=’). Và code vẫn hợp lệ với C/C++, vì đó là việc “gán x = 0” nằm bên trong lệnh if, nhưng nó mang 1 ý nghĩa khác hoàn toàn và dẫn đến code sai.Với cách 2 thì if (0 = x) là câu lệnh vô lý, làm sao mà hằng số gán giá trị được ? IDE sẽ gạch đỏ và báo lỗi ngay cho ta biết ===> “Code tự định nghĩa, tự né tránh lỗi vô lý”.Một vấn đề nữa đó là vấn đề đặt tên cho class/truct, tên hàm, tên biến, v.v (mặc định ta bàn tới tên biến cho dễ hiểu). Bạn sẽ phải mất nhiều thời gian để đặt tên biến sao cho hay và đúng quy tắc, dễ nhớ. Chỉ có những cao thủ họ mới hiểu được chuyện này. Khi bạn học cơ bản thì bạn chỉ quan tâm “tạo ra biến để xài” chứ ít quan tâm “tên biến như thế nào”. Đơn giản thôi, code vài dòng thì nhìn biến a, biến c, biến x biến y dễ dàng hiểu được. Còn code 10000 dòng thì nhìn vào x, y, z xem có hiểu nó là gì không ?

Cảnh giới 8. Hacking/cracking

Cảnh giới này dành cho những bạn nào thích học sâu về hệ thống bên dưới, có thể sâu đến mức nghiên cứu về hợp ngữ (asm).Bạn sẽ học với Windows API, shell (Windows). Với Linux bạn có thể tìm hiểu về system calls, kernel, shell, v.v Tôi không xài Linux nhiều nên chỉ chém vậy thôi.

2 hình trên là minh họa việc sử dụng Windows API để hack 1 game nho nhỏ. Bạn sẽ được demo thử công cụ “SuperPointer” của tôi khi học khóa học “Kỹ thuật lập trình & PP lập trình Hướng đối tượng cơ bản” của tôi (PR xíu, hihi).Ở cảnh giới này, bạn sẽ đi rất sâu về bên dưới, hiểu rõ đươc cơ chế hoạt động của hệ điều hành, ví dụ bạn tiêm DLL, ghi đè dữ liệu lên không gian bộ nhớ của tiến trình để hack, viết ra [virus] keylog, trojan, backdoor; hoặc bạn có thể nghiên cứu về cơ chế hook, message để từ đó mô phỏng lại quá trình test phần mềm tự động (test automation), v.v

Cảnh giới 9. Vô chiêu thắng hữu chiêu

Đến cảnh giới này thì có thể nói bạn đã bước chân đến mức master rồi.Ở cảnh giới này thì tôi đoán là nhìn code cũng chạy được code trong đầu, khỏi cần chạy trên IDE luôn haha. Bạn có thể tự viết thư viện riêng cho mình mà thậm chí còn hay hơn những thư viện bên ngoài.Nói vậy thôi, chớ tôi nghĩ rằng khi đạt đến mức độ này thì thường bạn sẽ đi nghiên cứu khoa học và công nghệ, về Big Data, Data Mining, Machine Learning, hay là Virtual Reality, v.vVà dĩ nhiên còn nhiều cảnh giới cao hơn, tầm mắt của tôi chỉ đạt tới mức này thôi.

Ghi chú: trong nhà trường, bạn học theo hướng dẫn thầy cô thì cùng lắm bạn chỉ học được một chút ở mỗi cảnh giới chứ bạn chưa thật sự tinh thông. Chỉ có sự tự học mới đưa bạn được tới đỉnh cao thôi :).Một điều quan trọng nữa là: – Nếu bạn chỉ biết ở mỗi cảnh giới một chút chút, thì tương đương bạn vẫn là con số 0 (biết 10 ngôn ngữ lập trình nhưng ở mỗi ngôn ngữ chỉ viết được chương trình Hello World). – Nếu bạn tinh thông đầy đủ mỗi cảnh giới, thì bạn vẫn có thể đạt đỉnh cao (chỉ biết 1, 2 ngôn ngữ lập trình nhưng tạo ra được sản phẩm hay). ===> Nếu đã xác định mình đã đam mê, hãy học tới nơi tới chốn, học cho kĩ cho sâu, phóng 1 mũi tên tựa như lao đến được đích cuối cùng. Bài này được viết với quan niệm của 1 junior(er), nên mang tính chủ quan cao. Trong quá trình tiếp xúc, giao lưu, đào tạo với nhiều học sinh, sinh viên, cao thủ khắp cả nước thì tôi rút trích lại và chia sẻ cho các bạn.P/S: junior(er) đối với tôi là kiến thức chuyên môn CNTT, kỹ năng IT và lập trình ở mức độ “biết nhiều hơn beginner, có khả năng làm ra sản phẩm ở mức độ cơ bản”, tôi vẫn chưa đạt cảnh giới của 1 senior, vẫn còn nhiều điều phải học hỏi từ nhiều cao thủ ẩn danh.

Cảm ơn các bạn đã đọc bài này.

Tác giả: Nguyễn Trung Thành.

Sử dụng .htaccess để cấu hình website - P3


  • Kiểm tra URL
    ?
    1
    2
    3
    4
    # automatically corect simple speling erors
    <IfModule mod_speling.c>
    CheckSpelling On
    </IfModule>
  • Sắp xếp lại trang thông báo lỗi: Cấu hình này rất hữu ích vì nó đưa ra lỗi cho người truy cập website một cách thân thiện, giúp cho các bạn có thể hiển thị các thông báo lỗi theo cách riêng.

Sử dụng .htaccess để cấu hình website - P1



Chúng ta sẽ đi qua 1 số cấu hình mà tôi cho là cần thiết đối với website của bạn.
  • Enable basic rewriting : Server có thể không bật chế độ “mod_rewite” mặc định, để đảm bảo chế độ này được bật, thêm vào file .htaccess tại thư mục root:

.htaccess căn bản


1. .htaccess là gì?

File .htaccess (hypertext access) của Apache là một file cấu hình sử dụng cho các web server chạy Apache, có tác dụng trên thư mục hiện hành và tất cả các thư mục con. Đồng thời .htaccess dùng để thiết lập các tùy chọn: thực thi hay loại bỏ các chức năng, tính năng của Apache. Vì vậy, để quản lí truy cập vào website của mình, đơn giản bạn chỉ việc soạn thảo một file .htaccess, và lưu nó vào thư mục root của website.

Tạo list pass với Crunch



Hôm nay mình giới thiệu đến các bạn công cụ tạo pass list nhanh chóng là Crunch. Công cụ này đã được tích hợ sẵn trên Kali nên các không cần tìm kiếm đâu xa.

Vào việc luôn nhé !

*Chú ý : Crunch cần quyền để tạo ra một file nên khi sử dụng các bạn nên dùng quyền của root nhé.

Đối với Kali Linux bình thường thì các bạn có thể mở Crunch bằng cách :

Application > Password Attack > Crunch

Hoặc, mở Terminal gõ : crunch (đối với các bạn dùng Katoolin thì hãy chắc chắn đã cài Crunchnhé)



Giao diện Crunch

Crunch có giao diện làm việc khá đơn giản chúng ta chỉ cần tập trung vào hai thông số cơ bản là<min> và <max> với :

<min>: số kí tự tối thiểu

<max>: số kí tự tối đa

Để có pass list tối ưu hơn tý ta có thể sử dòng lệnh :

# crunch <min> <max> <charset> -t <pattern> – o <path file>

với:

<charset>: kí tự có trong mật khẩu

<pattern>: các kí tự bạn đã biết chắc

<path file>: đừng dẫn file được tạo

VD: ví dụ mình sẽ tạo ra một pass list là số diện thoại với các điều kiện mình biết được

- có 10 kí tự

- các kí tự cấu tạo nên nó là 0123456789

- số 0 luôn đứng đầu tiên

Mình sẽ dùng lệnh như sau :

# crunch 10 10 0123456789 -t 0@@@@@@@@@ -o /home/ben/Desktop/list.txt



Và giờ chúng ta chỉ cần chờ đợi trên Desktop xuất hiện file list.txt có dung lượng đến 10GB :v hơi khủng nhỉ ? ^^

Kết :

Crunch là công cụ tạo pass list theo mình thấy là khá tốt. pass list được tạo ra rất sát với người dùng tạo ra, tốc độ ra output rất nhanh 10GB vừa rồi mình chỉ chờ tầm 5 phút là đã có !

Chúc các bạn thành công !!!

Thekalitools

Gitignore là gì?


Là những Dev bá đạo chúng ta đều biết đến Git để quản lý source code. Và thỉnh thoảng khi làm việc trong 1 team bạn hay gặp trường hợp 2 ông hay cả team suốt ngày bị xung đột mợt lên mợt xuống vì mấy file rác như file biên dịch, log, config, bờ la bờ la. Và thế là Gitignore đã ra đời để giải quyết vấn đề đó.

 
biz.