Skip to content

duyquoc1508/documentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 

Repository files navigation

Some keyword should know

Abbreviation keywords

NPM: Manages packages, you can install node.js packages, but doesn't make life easy executing any.

NPX: A tool for executing Node packages.

It doesn't matter whether you install that package globally or locally. NPX will temporarily install and run it. NPM also run package if you configure a package.json file and include it in the script section

So remember this, if you want to check/run a node package quickly without installing locally or globally use NPX.

NPM vs. NPX

API: Nếu ứng dụng web là 1 tòa nhà kiến cố, vậy API là con đường ra vào toàn thành đó.

Main In The Middle(MITM): Kẻ chặn Web API thông qua việc can thiệp vào con đường vận chuyển của mạng máy tính.

Web Crawler: Là bọn làm hàng hóa nhái chuyên thu thập hoàng hóa xịn, sau đó làm giả hoặc sử dụng cho mục đích riêng

IPN: Instant Payment Notification

API: Application Programing Interface

SDK: Software Development Kit

IP: Internet Protocol address

DNS: Domain Name System is a phonebook of Internet

OS: Operating system

AMQP: Advanced message queue protocol

CDN: Content delivery network

OSI: Operating system interconnection model

gRPC: Remote Procedure Call: là 1 giao thức request-response, thường được dùng để giao tiếp server-server, thường thấy trong kiến trúc microservices. gRPC sử dụng binary để truyền đi thay vì phải encode/decode thành các ngôn ngữ trung gian JSON/XML... như các request truyền thống. Vì vậy, tối ưu hóa về tài nguyên và tốc độ

ERC: Amazon Elastic Container Registry: là 1 private docker registry của Amazon. Dockerhub là 1 public docker registry. Docker registry là nới để host các image

CCU: Concurrent users (số lượng user đang hoạt động cùng một thời điểm)

C2S: Client-to-Server Encryption: Phương thức mã hóa dữ liệu trong đó người gửi mã hóa dữ liệu gửi đi và server giải mã gửi lại cho người nhận

E2E | E2EE: End-to-End Encryption: Dữ liệu gửi đi được mã hóa tại điểm cuối của người gửi. Người nhận là người duy nhất có thể giải mã được dữ liệu đó. Server chỉ có nhiệm vụ vận chuyển dữ liệu

CI: Continuous Integration: Là quá trình tự động build, test application một cách tự động dựa vào các scrips đã viết sẵn mỗi khi repository có thay đổi

CD: Continuous Delivery: A step beyond CI. Ứng dụng không chỉ build, test mỗi khi code thay đổi, mà còn deploy liên tục. CD sẽ kiểm tra code 1 cách tự động. Tuy nhiên, phải kích hoạt deploy theo cách thủ công

CD: Continuous Deployment: An another step beyond CI. Tương tự như Continuous Delivery nhưng ứng dụng sẽ được deploy 1 cách tự động. Không có sự can thiệp của con người

Concurrency: Đa luồng là khả năng 1 chương trình có thể điều phối (dealing) nhiều tác vụ trong cùng 1 khoảng thời gian và trong quá trình điều phối chỉ cho phép 1 tác vụ chạy trong 1 thời điểm

Parallelism: Là khả năng 1 chương trình có thể thực thi (doing) 2 hoặc nhiều task trong cùng một thời điểm với điều kiện cpu phải có từ 2 core trở lên

Race condition: Lỗi xảy ra khi 2 hoặc nhiều threads cùng thay đổi dữ liệu của 1 biến (vùng nhớ). Dẫn tới tính không chính xác của dữ liệu. Là 1 vấn đề cần lưu ý trong lập trình concurrency.

Deadlock: Xảy ra khi 2 hoặc nhiều threads cùng chờ dữ liệu của nhau (A đợi B và B cũng đợi A), dẫn tới đợi mãi mà không làm gì. Là 1 lỗi cần lưu ý trong lập trình concurrency

Deep link: Deep link là các đường dẫn được chia sẻ trên nền tảng mobile, vận hành khá giống hyperlink nhưng thay vì dẫn người dùng đến ngay một địa chỉ web page nào đó, deep link dẫn họ tới một màn hình cụ thể ngay trong ứng dụng.

Có 3 loại deep link:

  • Basic deep link
  • Deferred deep link
  • Contextual deep link

2FA: Two-Factor Authentication

OTP: One-time Password

HOTP: HMAC-based One-Time Password.

TOTP: Time-based One-time Password

REST APIs standard

Best practice APIs endpoint Read here

The standard best practice for REST APIs is to have a hyphen, not camelcase or underscores. Link

Docker

Docker cải thiện quá trình development and deployment

Development: quá trình code giữa các member trong team không

Before container:

  • Install nhiều phần mềm
  • Quá trình install qua nhiều step
  • Khác hệ điều hành
  • Cồng kềnh phức tạp => tốn nhiều thời gian

After container

  • One command to install the app
  • Packaged with all needed configuration
  • Run same app with 2 diff version

Deployment: Before container

  • Dependency version conflict
  • ...

Docker Compose takes care of creating a common Network

  1. Build images
docker build . -t name_image:v1
  1. Running the image locally
docker run -d -it -p 3000:3000 name_image:v1
  1. update container created
docker update --restart=always 0576df221c0b
  • Volume

$ docker run -v /home/mount/data:/var/lib/mysql/data

$ docker run -v host_volumes:container_volumes

  • host_volumes: where on the host file system the reference is made
  • container_volumes: auto create by docker, each container a folder is generated the gets amounted
  • Can reference volumes by name

Docker uses a client-server architecture. The Docker client talks to the Docker daemon, which does the heavy lifting of building, running, and distributing your Docker containers. The Docker client and daemon can run on the same system, or you can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API, over UNIX sockets or a network interface.

Lưu ý

Mỗi lệnh RUN chạy sẽ sinh ra 1 image layer, Nên gom các lệnh RUN lại => giảm số lượng imange layer sinh ra => giảm được size, tối ưu hóa thời gian build

Các instruction hay thay đổi thì nên để phía dưới để tối ưu

Các khái niệm liên quan

Murable Infrastructure:

Tức là: có sự thay đổi giữa các server (dev - production ...) dẫn tới sự hoạt động không ổn định của application, hay là app sẽ chạy lỗi => docker có thể khắc phục

Immurable Infrastructure

Infrastructure: không thay đổi cho dù deploy lên môi trường nào đi chăng nữa

Infrastructure as code (code: dockerfile)

Sử dụng dockerfile để quản lý runtime enviroment

Docker = Immurable Infrastructure + Infrastructure as code

Các lỗi hay gặp với docker

  • Ví dụ khi dockerize 1 server nodejs. Khi chạy và expose port ra thì server chạy hoàn toàn bình thường. Nhưng khi gọi đến resource từ máy vật lý thì không được và bị lỗi curl : The underlying connection was closed: The connection was closed unexpectedly.. Lúc này cần kiểm tra host của server đang chạy là gì. Nếu là localhost hay 127.0.0.1 thì sẽ bị lỗi này. Fix: Thay đổi host thành 0.0.0.0

Kubernestes

Ref: https://medium.com/google-cloud/kubernetes-101-pods-nodes-containers-and-clusters-c1509e409e16

Hardware

Nodes

Nodes is a concept of hardware. A node is the smallest unit of computing hardware in Kubernestes. It is a representation of a single machine in cluster. In most production system, a node will likely be either a physical machine in a datacenter or virtual machine hosted on a clound. Thinking of a machine as a "node" allow us to insert a layer of abstraction. Now, instead of worrying about the unique characteristics of individual machine, we can simply view each machine as a set of CPU and RAM resource that can be utilized. In this way, any machine can substitute any other machine in kubernetes cluster

Clusters

Although working with individual nodes can be useful, it's not the Kubernetes way. In general, you should think about cluster as a whole, instead worrying about the state of individual nodes. In kubernetes, nodes pool together their resource to form a powerful machine. When program deployed onto cluster, it intelligently handles distributing work to the individual nodes for you. If any nodes are added or removed, the cluster will shift around work as necessary. It shouldn't matter to program, our the programmer, wich individual machines are actually running the code

Persistent Volumes

Because programs running on your cluster aren't guaranteed to run on a specific node, data can't be saved to any arbitrary in the file system. If a program tries to save data to a file for later, but is then relocated onto a new node, the file will no longer be where the program expects it to be. To store data permanently, Kubernetes uses Presistent Volumes. Presistent Volumes provide a file system that can be mounted to the cluster, without being associated with any particular node.

Software

Containers

Programs running on k8s are packaged as Linux Container. Containerization allows you create self-contained Linux execution environments. Any program and all its dependencies can be bundled up into a single file.

Pods

Kubernetes doesn't run containers directly, instead it wraps one or more containers onto a higher-level structure called a pod. Any containers in the same pod will share the same resource an local network. Container can easily communicate with other container in the same pod as though they were on the same machine while maintaining a degree of isolation from others.

Pods are used as the unit of replication in Kubernetes. If you want to have multiple copies of a pod running at any time in a production system, Kubernetes can be configured to deploy new replica of your pod to the cluster as necessary.

Pods can hold multiple containers, but you should limit it when possible. Because pods are scale up and down as a unit, all container in a pod must scale together, regardless of their container need. This leads to wasted resources and an expensive bill.

Deployment

Although pods are the basic unit of computation in K8s. They are not typically directly launched on a cluster. Instead, pods are usually managed by one more layer of abstraction: Deployment

Jenkins

  1. Run jenkins and keep start automatically when Docker daemon restarts
docker run -it -d --restart=always --name myjenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home  jenkins/jenkins

Gitlab CI/CD

  • Gitlab runner: is an application that works with GitLab CI/CD to run jobs in a pipeline.

When you register a runner, you are setting up communication between your GitLab instance and the machine where GitLab Runner is installed. Runners usually process jobs on the same machine where you installed GitLab Runner.

  • Executors: When you register a runner, you must choose an executor. An executor determines the environment each job runs in. When you install GitLab Runner in a Docker container and choose the Docker executor to run your jobs, it’s sometimes referred to as a “Docker-in-Docker” configuration

Sau khi commit code có chứa file .gitlab-ci.yml thì quá trình CI/CD được khỏi động. Gitlab sẽ tạo ra 1 pipeline. pineline chính là toàn bộ những gì được viết trong file .gitlab-ci.yml, pipeline sẽ chứa nhiều jobs, các jobs này sẽ đươc gửi đến các Gitlab runners, mỗi con runner sẽ tạo ra 1 môi trường riêng để chạy job và sau khi kết thúc thì sẽ trả kết quả lại cho Gitlab

Mặc định Gitlab có nhiều Shared Runners dùng cho tất cả mọi người, chúng ta có thể dùng runner này hoặc có thể cài Gitlab runner về server riêng để build cho nhanh

Runner execution flow

This diagram shows how runners are registered and how jobs are requested and handled

GitLab CI/CD flow

Docker-in-Docker (dind)

"Docker-in-Docker" (dind) means:

  • Your registered runner uses the Docker executor.
  • The executor uses a container image of Docker, provided by Docker, to run your CI/CD jobs.

Tại sao phải dùng docker-in-docker

  • Giải thích ngắn gọn Trong môi trường docker:19 mà job chúng ta đang chạy, theo lý thuyết nó có docker, nhưng để chạy được command với docker trong đó thì ta cần 1 container để support đó là docker:dind đóng vai trò như kiểu cầu nối giữa docker-clidocker deamon (Docker Server) vậy. (docker-cli hay còn gọi là Docker Client là thứ mà ta chạy ở command line docker build...)
  • Giải thích chi tiết + demo https://gitlab.com/duyquoc1508/gitlab-ci

System architecture

Process vs. Thread

  • Process: 1 process đại diện cho 1 chương trình được running trong hệ điều hành. Ví dụ mở app chrome thì chrome đại diện cho 1 process. Trong process có nhiều thread
  • Static: Các biến được khai báo là static trong code được lưu vào đây
  • Heap: Vùng nhớ cho các vấn đề cấp phát động
  • Code: Để chương trình chạy được thì code phải được nạp lên process. Nên code toàn bộ source code của chương trình phải được lưu lại tại đây
  • Thread: Là tập con của 1 process
    • Registers: Thanh ghi. Có 2 thanh ghi chính là PC-Program CounterStatus Register
      • Program Counter: Quản lý dòng lệnh nào sẽ chạy tiếp theo (giống lúc debug)
      • Status Register: Lưu lại trạng thái của thread đó. Ví dụ như lập trình đa luồng, các tác vụ xen kẽ lẫn nhau, thì khi tạm dừng tác vụ này để tác vụ khác chạy, status register có tác dụng lưu lại trạng thái của tác vụ dừng (ví dụ download: 30%), để khi tác vụ được chạy lại thì thread sẽ biết chạy tác vụ đó từ đâu (ví dụ chạy lần sau, download từ 30% trở đi)
    • Stack: Dùng để lưu trữ các biến cục bộ trong hàm, tham số truyền vào...

Key difference

Concurrency vs. Parallelism

Key difference

How concurrency work

Mô hình mô tả cách hoạt động của các thread trong concurrency

  • T1, T2 ... đại diện cho các thread đang chạy trong 1 chương trình đa luồng
  • Khi switch context bước thứ 2 (Lưu context) là nhiệm vụ của thanh ghi Status Register đề cập phía trên

How nodejs handle 10k concurrent request

Ref: - https://stackoverflow.com/questions/34855352/how-in-general-does-node-js-handle-10-000-concurrent-requests - https://javascript.plainenglish.io/how-many-requests-can-handle-a-real-world-nodejs-server-side-application-55da7a2f06f3

Node.js

Ref: https://www.freecodecamp.org/news/do-you-want-a-better-understanding-of-buffer-in-node-js-check-this-out-2e29de2968e8/

Stream

Stream trong node.js là một chuỗi dữ liệu được di chuyển từ điểm này đến điểm khác theo thời gian. Khái niệm này phát sinh khi bạn có 1 lượng lớn dữ liệu cần phải xử lý, nhưng bạn không cần phải đợi tất cả dữ liệu có sẵn rồi mới bắt đầu xử lý. (memory efficiency + time efficiency)

Binary data

Máy tính lưu trữ và biểu diễn dữ liệu trong các tệp nhị phân. Để lưu trữ hoặc biểu diễn dữ liệu, máy tính cần chuyển đổi dữ liệu đó sang dạng biểu diễn nhị phân của nó. Máy tính biết cách biểu diễn các dữ liệu number, strings, images, videos... dưới dạng nhị phân dựa vào character setscharacter encoding Ví dụ: Ký tự (L) > "L".chartCodeAt(0) = 97 (dựa vào character sets (unicode)) > biểu diễn nhị phân là (01001100) (dựa vào charater encoding)

Character sets

Xác định quy tắc về 1 số đại diện cho 1 kí tự nào. Những bộ kí tự phổ biến Unicode, ASCII. Javascript hoạt động tốt với bộ mã Unicode

Character encoding

Chứa các quy tắc cách số đó nên được biểu diễn trong các mã nhị phân, cụ thể là dùng bao nhiêu bit để biểu diễn số. Một trong những định nghĩa cho mã hóa kí tự là UTF-8. UTF-8 định nghĩa rằng các kí tự phải được mã hóa theo byte. Một byte là tập hợp 8 bits. Để tham chiếu đến các kí tự một cách rõ ràng, mỗi kí tự được liên kết với 1 số được gọi là 1 code point

Ví dụ: biểu diễn nhị phân của số 12 là 1100. UTF-8 nói rằng số 12 phải ở 8 bits, nếu số được biểu diễn chưa đủ thì máy tính cần thêm các bit 0 vào bên trái của biểu diễn nhị phân để nó trở thành 1 byte, vì vậy 12 nên được biểu diễn là 00001100.

Tương tự như vậy, máy tính cũng có các quy tắc cụ thể về cách hình ảnh và video nên được chuyển đổi hoặc mã hóa và lưu trữ dưới trong các tệp nhị phân.

Buffer

Lớp buffer được giới thiệu như 1 phần của API node.js để giúp nó có thể thao tác hoặc tương tác với các luồng dữ liệu nhị phân Một luồng di chuyển dữ liệu (stream) là sự di chuyển dữ liệu từ điểm này sang điểm khác, sự di chuyển dữ liệu thường với mục đích xử lý hoặc đọc nó và đưa ra quyết định dựa trên nó. Nhưng có 1 lượng dữ liệu tối thiểutối đa mà một quá trình có thể mất theo thời gian. Vì vậy nếu tốc độ dữ liệu tới nhanh hơn tốt độ xử lý dữ liệu thì dữ liệu thừa cần phải đợi ở đâu đó để tới lượt nó được xử lý. Mặc khác, nếu tốc độ dữ liệu đến chậm hơn quá trình xử lý dữ liệu, thì một số ít dữ liệu đến sớm hơn cần phải 1 đợi lượng dữ liệu đến nữa để nó được xử lý. Nơi dữ liệu chờ xử lý được gọi là buffer. Đó là 1 vị trí nhỏ trong máy tính, thường là trong RAM, nơi dữ liệu tạm thời được thu thập, chờ đợi và cuối cùng được gửi đi để xử lý.

Ví dụ: Chúng ta coi toàn bộ stream và buffer process như là 1 trạm xe bus. Xe bus không được phép khởi hành cho đến khi có một lượng khách nhất định (tối thiểu) hoặc đến đến một giờ khởi hành cụ thể. Hành khách có thể đến vào các thời điểm khác nhau với tốc độ khác nhau. Hành khách và bến xe đều không kiểm soát được việc hành khác đến bến. Trong mọi trường hợp những hành khách đến sớm sẽ phải đợi cho đên khi xe bus đủ số lượng hành khách tối thiểu để khởi hành hoặc khi xe đã khởi hành thì phải đợi chuyến khác.

Ví dụ điển hình để cho thấy cách hoạt động của buffer. Nếu internet đủ nhanh, tốc độ của stream đủ nhanh để lấp đầy buffer ngay lập tức và gửi nó ra ngoài để xử lý, video sẽ được phát thuận lơi đến khi kết thúc. Nhưng nếu kết nối chậm lúc đó sẽ hiện chữ "loading..." hoặc "buffering..." có nghĩa là đang thu thập thêm dữ liêu hoặc chờ dữ liệu đến khi buffer được lấp đầy để xử lý

MongoDB

Thiết kế cơ sở dữ liệu với mongodb Best Practice

Network

Ping

Ping là 1 phần của ICMP (Internet Control Message Protocol) được sử dụng để khắc phục sự cố mạng TCP/IP. Ping cho phép kiểm tra xem máy chủ có còn sống hay không

Telnet

Telnet là một chương trình TCP/IP. Cho phép chúng ta kết nối với máy tính từ xa trên một cổng cụ thể. Khi kết nối, nó lấy deamon đang chạy trên cổng đó.

OSI model

OSI model là gì: https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/

Git

Git: là Version control/source control systems

Github: là Repo Hosting Services

[git] Keep empty directory by .gitkeep .gitkeep là một file giả dùng để giữ chỗ. Vì git không theo dõi thư mục nên có thể bỏ qua các thư mục trống, git chỉ theo dõi sự thay đổi của các file.

Git không phân biệt được sự khác biệt khi thay đổi tên file chỉ khác với teen cũ các kí tự viết hoa và viết thường. Để git biết được sự thay đổi này thì dùng lệnh git để rename file.

git mv BlackList.sol Blaclist.sol

Google Search Skills

  • Notes:

    • Thứ tự xuất hiện từ khóa khác nhau sẽ cho ra kết quả khác nhau
    • Viết thường viết hoa không quan trọng
    • Có một số kí tự đặc biệt mà google chưa phân biệt được
    • Không cần quan tâm đến chính tả, ngữ pháp (search tiếng anh)
    • Chú ý đến mạo từ đầu câu
  • Tips:

    • Định nghĩa nhanh

      [define blockchain] thay vì [what is blockchain]

    • Tìm từ trang cụ thể

      [nodejs site:stackoverflow.com] kèm với domain

    • Tìm theo loại file

      [UML filetype:pdf] kèm với file type

    • Loại bỏ từ khóa bất kì (đặt dấu “-” trước từ khóa)

      [sách nguyễn ngọc thuần -tiki -fahasa -lazada -vinabook]

    • Tìm câu trích dẫn (đặt câu trích dẫn vào dấu ngoặc kép)

    • Tìm kiếm theo nhiều từ khóa (kết hợp keyword với 'or')

      [keywordA OR keywordB]

    • Kết quả trả ra bắt buộc phải có từ khóa đó (dùng 'intext' trước keyword cần có)

      [TừKhóa1 TừKhóa2 intext:TừKhóa3]

Javascript

  • JS array vs object vs map

    • Cần truy cập vào 1 mảng bằng khóa mà không quan tâm đến thứ tự => dùng object
    • Nếu quan tâm đến thứ tự chèn => dùng Map (new Map())
  • Why null >= 0 && null <= 0 but not null == 0?

  • Javascript event loop explained JS event loop

    • Stack là nơi lưu giữ các con trỏ hàm đang thực hiện,. Khi hàm bắt đầu chạy thì nhảy vào đây, hàm nào xong rồi thì đi ra. Do bản chất stack nên thằng nào vào sau sẽ ra trước.
    • Queue là hàng đợi sự kiện, mỗi thằng sự kiện mới sẽ chui vào đây, thằng nào vào trước lấy trước. Sự kiện có thể là I/O event, timeout event, interval event, v.v..
    • Event loop là 1 thằng chuyên đi nhặt các sự kiện trong hàng đợi (queue) để xử lý. Tuy nhiên nó chỉ nhặt khi và chỉ khi stack trống.

Web security knowledge (HTTPS, TLS, SSL, CORS, CSP)

https://dev.to/ahmedatefae/web-security-knowledge-you-must-understand-it-part-i-https-tls-ssl-cors-csp-298l

HTTPS

The secure version of HTTP, It uses encryption communication protocol, named Transport Layer Security (TLS), was known as Secure Sockets Layer (SSL).

Mã hóa API

Mặc dù HTTPS là giao thức HTTP đi kèm mã hóa đầu cuối để phòng chống MITM. Tuy nhiên các dev thấy đây vẫn là chưa đủ, và họ đã đi thêm 1 bước nữa trên con đường phòng chống những kẻ tò mò. Chung quy lại là phương pháp này bao gồm các bước:

  1. Tạo 1 Secret Key trên server.
  2. Chia sẻ Secret Key giữa client và server (Qua fix cứng trong code, file config, API).
  3. Dùng Secret Key với mã hóa AES (hoặc bất kỳ thuật toán mã hóa tin cậy nào đó) mã hóa response trả về từ server.
  4. Dùng Secret Key để giải mã trở lại lấy thông tin từ Response.

Về cơ bản thì nó không khác gì concept của HTTPS, tức là mã hóa và giải mã đầu cuối để người ở giữa không đọc được. Cái khác ở đây chính là HTTPS được trình duyệt thực hiện tự động, còn mã hóa API ta phải tự thực hiện trong code client.

TLS (Transport Layer Security)

Bất kì ứng dụng hoặc trang web nào sử dụng TLS đều phải cài đặt chứng chỉ TLS (còn được gọi là chứng chỉ SSL) trên máy chủ. được cấp cho người sở hữu Domain để cài đặt chứng chỉ đó trên máy chủ.

Nó chứa thông tin rất quan trọng về chủ sở hữu, các khóa riêng tư và công khai để sử dụng trong việc mã hóa và giải mã thông tin liên lạc.

SSL (Secure Sockets Layer)

What is the difference between TLS and SSL?

SSL is the older version of the TLS, the name changed after the Internet Engineering Task Force (IETF) be the owner of the SSL development after Netscape, some developer nowadays uses the SSL and TLS to referring for the same thing.

CORS (Cross-origin resource sharing)

Bọn cướp trên núi giả dạng nông dân để dùng hàng hóa từ thị trấn. CORS không chống việc bất kỳ ai đó gọi API, CORS header chỉ có tác dụng với request từ trình duyệt.

CSP (Content Security Policy)

lớp bảo mật hơn giúp phát hiện và giảm thiểu các loại tấn công khác nhau như (Cross-Site Scripting (XSS), injection attacks, ClickJacking, ETC ...).

CSP sử dụng khái niệm Directives mà mọi Chỉ thị phải chỉ định tài nguyên có thể tải từ đâu, ngăn trình duyệt tải dữ liệu từ bất kỳ vị trí nào khác.

Set Access-Control-Allow-Origin header.

Đây là header được server trả về để báo cho trình duyệt biết: "Tao chỉ cho phép trang web có domain này gọi đến tao thôi". Phương thức lưu giữ phiên đăng nhập sử dụng cookie sẽ có đặc điểm của cookie đó là tự gắn cookie vào request khi gọi tới domain gốc. Do vậy nếu bạn vào trang web fakezalo.com, trang web này hoàn toàn có thể gọi lên API của Zalo để lấy thông tin người dùng đang đăng nhập hiện tại của bạn (do khi gọi API của Zalo sẽ tự có cookie của Zalo). Access-Control-Allow-Origin header sinh ra là để phòng chống việc này.

XSS (Cross-Site Scripting)

Lỗ hổng cho phép hacker chèn script vào trang web để client thự thi nó để lấy các dữ liệu nhạy cảm như cookie, session’s info and site-specific information. Vì web-app không sử dụng đủ các phương thức xác thực và mã hóa. trình duyệt của người dùng thì không thể phát hiện ra 1 đoạn script người dùng chèn vào có nguy hiểm hay không

Data injection attacks

là một mã được được đưa vào mạng. mã này lấy tất cả thông tin từ database đến kẻ tấn công. SQL injection là một loại

Click jacking || UI redress attack (Tấn công chỉnh sửa giao diện người dùng)

attacker đành lừa người dùng nhấp vào nút hoặc liên kết trên 1 trang khác sử dụng nhiều lớp trong suốt. có thể redirect tới các trang mà người dùng không mong muôn

Brute Force Attack

Hacker nắm trong tay một danh sách rất lớn các username và password phổ biến hay được sử dụng. Sau đó họ gửi liên tục các truy vấn đăng nhập vào trang web, nếu tài khoản nào sai thì bỏ qua và tiếp tục thử lại với tài khoản khác. Cứ lần lượt như vậy sau đó "trộn" mật khẩu đến khi đăng nhập được thì thôi. Đó gọi là Brute force. Phương thức này là 1 cách để dò mật khẩu và tài khoản. Hay được khai thác bởi các website wordpress bởi hình thức tấn công này nhắm vào các mã nguồn thông dụng.

Elastic search

  • Elasticsearch: là công cụ tìm kiếm và phân tích phân tán

  • Kibana: là một nền tảng phân tích hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử dụng, cung cấp cho người dùng quản lý như biểu đồ cột, biểu đồ đường,...

  • Filebeat: là một dịch vụ gửi hàng gọn nhẹ để chuyển tiếp và tập trung dữ liệu logs. Filebeat giám sát các tệp nhật kí hoặc vị trí mà bạn chỉ định, thu thập các sự kiện nhật ký và chuyển tiếp chúng tới Elasticsearch hoặc Logstash để lập chỉ mục

  • Logstash: Logstash là một đường dẫn xử lý dữ liệu phía máy chủ, nhập dữ liệu từ nhiều nguồn đồng thời, biến đổi dữ liệu và sau đó gửi dữ liệu đó đến một "kho lưu trữ" như Elasticsearch

  • ELK stack: Elasticsearch + Logstash + Kibana

Web server

Nginx

Đóng vai trò như một cổng kết nối giữa internet và back-end

Phân biệt Web Server vs. Application Server

Application server không require. nhưng nó được require khi ứng dụng được yêu cầu xử lý 'logic kinh doanh' mà web server không thể xử lý được

ref:

Mã hóa và giải mã đường truyền

  • Mã hóa và giải mã: bảo đảm tính bảo mật (encryption vs decryption): bảo đảm tính bảo mật của dữ liệu
  • Ký và xác minh (Signing And Verification): (signature or checksum) Signing is different from encryption, in that it enables you to assert authenticity, rather than confidentiality. Bảo đảm tính xác thực thay vì bảo mật
  • Note that only the party with the private key can sign a message, but anyone with the public key can verify it.

ref:

Hash

  • Hash (crypto.createHash) vs. HMac (crypto.createHmac): HMAC is a keyed hash of data. Mã hóa có key. Secret key cung cấp cho bên tin cậy, thì ta có thể tin rằng chỉ có bên đáng tin cậy (bên giữ key) mới có thể tạo ra chữ ký đó. Hash thường dùng để đảm bảo tính toàn vẹn dữ liệu, dữ liệu không bị thay đổi trên đường truyền. Nếu chỉ hash các field của payload, hacker có thể dò ra thứ tự đúng của các field, sau đó hacker có thể lợi dụng kẽ hở này để gian lận được. Vậy nên thêm secret key vào hash (Hmac) có để đảm bảo hơn dữ liệu chỉ đến từ nguồn đáng tin cậy. Nguồn được chia sẻ key

Unicode, UTF-8, UTF-16

ref:

Blockchain

Binance chain vs Binance smart chain architecture

  • Binance Chain: Nền tảng blockchain riêng được tối ưu hóa tốc độc giao dịch(ultra-fast trading) và thông lượng giao dịch(high tx throughput). Chưa đủ linh hoạt vì không support smart contract. Tuy nhiên đây là cách thiết kế hệ thống có chủ đích để ngăn chặn sự tắt nghẽn (như Ether do CryptoKitties). primary focus, its native decentralized application (“dApp”) Binance DEX

  • Binance Smart Chain: Nền tảng blockchain có thể chạy smart contract chạy song song với Binace Chain. Use Proof of Staked Authority (PoSA) ~3s/block. Tương thích với (EVM). Có thể chạy độc lập khi không có Binace Chain. No block rewards. Validator stake BNB and accumulate tx fees.

Binance Chain and BSC have a dual-chain architecture with cross-chain compatibility. 2 nền tảng bổ sung cho nhau và có thể chuyển tài sản qua lại giữa các nền tảng

  • Compare:

  • Interactive:

Blockchain layers (L0, L1, L2, L3) in a Diagram

ref: https://medium.com/@nick.5montana/blockchain-layers-l0-l1-l2-l3-in-a-diagram-569162398db

Smart Contract

  • ERC-20:

docs: https://eips.ethereum.org/EIPS/eip-20

  • ERC-721: NFTs

Non-fungible means not completely interchangeable. Không thể hoán đổi hoàn toàn cho nhau.

docs: https://eips.ethereum.org/EIPS/eip-721

  • ERC-1155: Có thể được coi là một cải tiến trên cả ERC-721 và ERC-20. Nó tạo ra một tiêu chuẩn hỗ trợ cả token có thể thay thế lẫn nhau và không thể thay thế trong cùng một hợp đồng.

docs: https://eips.ethereum.org/EIPS/eip-1155

  • Hỗ trợ cả ERC-20(fugiable) và ERC721(non-fungiable)

  • Cho phép gửi nhiều loại token cùng lúc. đến cùng 1 địa chỉ

  • Cho phép quản lý nhiều loại token trên cùng một smart contract

  • BEP-2 chuẩn token trên binance chain

  • BEP-20 chuẩn token trên binance smart chain

The ERC721 Standard states that:

“Every ERC-721 compliant contract must implement the ERC721 and ERC165 interfaces”

Interfaces

An interface is basically an abstract contract, but the only thing you can define are unimplemented functions. It’s an outline, written in Solidity code, which ensures contracts written by other developers all work well together, without having to know each other’s code base.

So by just using an interface, you’re telling other developers about some of the functions your contract has, and how to use them. Easy!

ERC 165

It only has one function! The ERC165 Standard is just a way of checking if your contract’s fingerprints match the fingerprint of any given interface. Let’s have a look at the ERC165 Standard interface in its entirety:

interface ERC165 {
 /// @notice Query if a contract implements an interface
 /// @param interfaceID The interface identifier, as
 ///  specified in ERC-165
 /// @dev Interface identification is specified in
 ///  ERC-165. This function uses less than 30,000 gas.
 /// @return `true` if the contract implements `interfaceID`
 ///  and `interfaceID` is not 0xffffffff, `false` otherwise
 function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

Why we need to check contract support an interface or not? => Solidity already provides a way for a contract to call functions from another contract. To make sure the called contract supports a function that you want to call. What we can do is add a validation check.

That is what ERC165 is for — a standard to publish and detect what interfaces a smart contract implements.

More: https://medium.com/@chiqing/ethereum-standard-erc165-explained-63b54ca0d273

  • Overflow: Ví dụ uint8 chỉ chứa các giá trị trong khoảng [0, 255]. Nếu giá trị hiện tại của uint8 là 255, khi tăng lên 1 đơn vị thì giá trị không phải là 256 mà là 1. Hiện tượng này được gọi là Overflow.

  • Underflow: Nếu giá trị hiện tại của uint8 là 0 khi giảm 1 đơn vị thì giá trị không phải là 0 mà là 255. Hiện tượng này được gọi là Underflow.

Các lỗ hổng này có thể được attaker khai thác ở các hàm transfer hay increaseTimeLock,.... Lỗ hổng này tạm gọi là tràn số trong toán học. Các phiên bản Solidity từ 0.8.0 đã khắc phục được lỗi này, các phiên bản trở về trước phải sử dụng thư viện SafeMath để handle các lỗi liên quan đến các phép toán trong solidity

  • Abstract contract: biếu thị contract là trừ tượng, contract phải được khai báo là abtract khi có ít nhất 1 function không được implemented.
  • Interfase: Khác với abstract, toàn bộ function trong interface đều không được implement.
  • virtual and override: Một hàm chỉ được ghi đè nếu nó được khai báo là virtual hoặc được định nghĩa trong interface hay abstract contract. Khi muốn thay đổi hoặc ghi đè ta sửu dụng từ khóa overrice

DEFI

Model: Explain:

  • Bridge: Thông những cái blockchain với nhau. Vì các block chain có nhu cầu giao tiếp với nhau (cross-chain)
  • Assets: Tài sản (finace). Tiền…
  • Liquidity Provider: cung cấp thanh khoản cho sàn
  • AMM – DEX: Sàn giao dịch (binance - kubi)
  • Oracle: Cấp dữ liệu vào bộ máy để Dapp hoạt đông (chainLink)
  • Indexer: Ngược lại với Oracle. Đọc dữ liệu từ dapp đưa ra ngoài
  • NFT: Đưa tài sản thật vào hệ thống để lấy tiền (Giống như đi vay - bán)
  • RWA: read world asset
  • Insurance: Bảo hiểm dapp. Có trách nhiệm bảo hiểm
  • Audit: Kiểm tra hợp đồng thông minh. K có trách nhiệm đền bù
  • Predict market: Thị trường tương lai

Topic:

  • lending
  • dexes
  • dericatives
  • payements
  • assets

Các positions ( tài sản trong các pool) sẽ được tracked theo một loại token được gọi là cToken. cToken là một loại ERC-20 nó thì đại diện cho một loại tài trong Compound. Ví dụ như nếu bạn deposit ETH vào Compound thì nó sẽ sinh ra lượng cETH tương ứng để chuyển vào tài khoản của bạn. Hay nếu bạn deposit một stablecoin DAI thì bạn cũng sẽ nhận được một lượng cDAI tương tự. Các loại cToken này được gọi là các đồng quản trị nó theo dõi các dòng tiền vào ra của liquidity pool, có thể hiểu là khi một lượng tài sản được deposit vào pool thì một lượng cToken tương ứng của loại tài sản đó sẽ được mint (in) ra và ngược lại khi một lượng tài sản được withdraw ra khỏi pool thì một lượng cToken tương ứng cũng sẽ bị burn (đốt) đi. Điều này giúp các smart contract có thể nắm được số lượng tài sản hiện có trong pool một cách dễ dàng. cToken này là đại diện cho lượng tài sản mà người dùng đã đóng góp vào pool nên họ có thể sử

Zero knowledge prove (ZKP)

Zk rollup

Là giải pháp mở rộng Layer 2 giúp giải quyết vấn đề mở rộng trên Ethereum bằng cách đưa các giao dịch ra ngoài chuỗi (off-chain)

  • Các thành phần chính
  • Sequencer: Đóng vai trò là thực thi, tổng hợp và đóng gói các giao dịch trên Layer 2 lại thành các Batch (lô)
  • Proposer: Đóng vai trò đăng tải trạng thái mạng (State Root) lên Ethereum.
  • Prover: Đóng vai trò là tạo bằng chứng chứng minh tính đúng đắn của State Root.
  • Cơ chế hoạt động
  • Thực thi & Tổng hợp giao dịch
  • Gửi về Layer 1
  • Tạo ra bằng chứng giao dịch (Validity Proof) Mỗi khi Proposer gửi State Root về Layer 1 thì họ cần các Prover có thể tạo bằng chứng cho những State Root đó. Chính vì vậy, khi State Root được gửi cùng với Validity Proof xuống Ethereum thì nền tảng Verifier Contract sẽ chỉ cần xác minh những Validity Proof đó.

Vì sao ZK Rollup giải quyết bài toán mở rộng trên Ethereum?

  • Nén dữ liệu giao dịch: Thay vì thực thi trực tiếp hàng trăm các giao dịch trên Ethereum thì tính toán đó sẽ được mang ra off-chain và xử lý trên ZK Rollup. Biến hàng trăm giao dịch thành một giao dịch duy nhất rồi gửi về Ethereum làm tiết kiệm một lượng lớn phí giao dịch của người dùng từ đó cải thiện khả năng mở rộng cho Ethereum theo hướng off-chain.
  • ZK Proof: ZK Proof có thể là bằng chứng để chứng minh các bằng chứng khác. Hiện tại, mỗi một State Root được gửi từ ZK Rollup xuống Layer 1 thì sẽ được gửi kèm với một bằng chứng giao dịch hợp lệ (Validity Proof). Tuy nhiên, vấn đề là các On-chain Contract trên Ethereum cứ phải xác minh từng bằng chứng một làm cho mạng lưới trở nên chậm chạp hơn. Với Recursive Proofs nó có thể tạo ra nhiều khối và mỗi khối có 1 bằng chứng giao dịch đi kèm sau đó kết hợp nhiều State Root đó và nhiều bằng chứng giao dịch đó, từ nhiều bằng chứng giao dịch tạo ra một bằng chứng giao dịch duy nhất đại diện cho nhiều State Root đó

read more: https://hakresearch.com/zk-rollup-la-gi/

Releases

No releases published

Packages

No packages published