Chuyển đến nội dung chính

WebAssembly - Có thể bạn đã biết ?

 Giới thiệu


WebAssembly (gọi tắt là WASM) là một công nghệ góp phần không nhỏ trong sự phát triển ứng dụng Web và ngày càng được sử dụng phổ biến bởi ưu thế hiệu năng, tính bảo mật cao cho WebApp so với ngôn nhữ lập trình Javascript.
- Nếu như trước đây khi tải một Website về thiết bị, chỉ cần 3 ngôn ngữ gồm HTML/CSS/JavaScript là có thể tạo nên một WebApp tương tác với người dùng. Nhưng thời điểm hiện tại, các trình duyệt  Web sẽ phải tìm hiểu thêm ngôn ngữ mới, đó là WASM.



- Đây là thành quả nghiên cứu của Microsoft, Google, Mozilla, Apple. WASM được sinh ra để giải quyết hiệu năng của JavaScript, đặc biệt là các tác vụ xử lý  video, image, audio, thuật toán ...
WASM là một ngôn ngữ khác với JavaScript, nhưng nó không nhằm mục đích thay thế. Thay vào đó, nó được thiết kế để bổ sung và hoạt động cùng với JavaScript, cho phép các nhà phát triển web tận dụng điểm mạnh của cả hai ngôn ngữ.
WASM là một dạng tệp nhị phân cấp thấp cho nền tảng Web, tương tự như file .exe của Windows và được build ra bằng ngôn ngữ C/C++, Rust hoặc Golang (Bài viết này sẽ dùng Golang).
- Tương thích mới nhiều loại trình duyệt và thiết bị di động


Viết WASM với Golang

package main

import (
    "crypto/md5"
    "encoding/hex"
    "encoding/json"
    "strconv"
    "syscall/js"
    "time"
)

func main() {
    fmt.Println("Hello, WebAssembly!")
    js.Global().Set("EncodeData", js.FuncOf(EncodeData))
    <-make(chan bool)
}

func EncodeData(this js.Value, args []js.Value) interface{} {
    if len(args) != 1 {
        return "Invalid no of arguments passed"
    }

    accSecure := args[0].String()
    timeSecure := time.Now().Unix()

    encryptMD5 := md5.Sum([]byte(accSecure + strconv.Itoa(int(timeSecure))))
    hexMD5 := hex.EncodeToString(encryptMD5[:])

    data := map[string]interface{}{
        "data":         accSecure,
        "data_encrypt": hexMD5,
        "time":         timeSecure,
    }

    dataParse, _ := json.Marshal(data)

    return string(dataParse)
}



- Hàm EncodeData  trên data đầu vào là 1 string, kết quả trả ra là data được mã hóa dạng md5(acc + timestamp)
- Để có thể gọi hàm EncodeData này trên JavaScript, chúng ta sử dụng package syscall/js và nó sẽ cung cấp cho ta một số chức năng cơ bản.
js.Global().Set("EncodeData", js.FuncOf(EncodeData))  đây là câu lệnh để truy cập biến toàn cục trong JavaScript. Hiểu nôm na đó là gọi hàm Go EncodeData trên JavaScript.
- Đặt các biến môi trường GOOS = jsGOARCH = wasm để biên dịch cho WebAssembly:
      $ GOOS=js GOARCH=wasm go build -o main.wasm
- Để thực thi main.wasm trong trình duyệt, chúng ta cũng sẽ cần tệp hỗ trợ JavaScript và trang HTML để kết nối mọi thứ với nhau:
      $ cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

- Tương tác của các file trong dự án:


<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>Go wasm</title>
</head>

<body>
    <script src="wasm_exec.js"></script>
    <script>
        var go = new Go
        var fetchAndInstantiate = async function (wasm, t) {
            return fetch(wasm)
                .then(response => response.arrayBuffer())
                .then(bytes => WebAssembly.instantiate(bytes, t))
                .then(result => result.instance)
        }

        var mod = fetchAndInstantiate("http://mingid.mediacdn.vn/main.wasm", go.importObject);

        window.onload = function () {
            mod.then(function (e) {
                go.run(e)
            })
        };
    </script>
</body>

</html>

- Đoạn script trên sẽ nạp mã WASM từ file main.wasm, sau khi quá trình này diễn ra thành công ta có thể sử dụng hàm EncodeData.
- Lên trình duyệt gõ thử ra như hình là thành công




Nhận xét

Bài đăng phổ biến từ blog này

OWASP Top 10 Project

Dự án bảo mật ứng dụng (OWASP) là một cộng đồng dành riêng cho các tổ chức phát triển, mua và duy trì các ứng dụng và API có thể tin cậy. Đặc điểm của OWASP: Các công cụ và tiêu chuẩn bảo mật ứng dụng Hoàn thành các cuốn sách về kiểm tra bảo mật ứng dụng, mã an toàn  phát triển và xem xét mã an toàn Trình bày và video Cheat sheet trên nhiều chủ đề phổ biến Các thư viện và điều khiển bảo mật tiêu chuẩn Các chương địa phương trên toàn thế giới Nghiên cứu tiên tiến Hội nghị mở rộng trên toàn thế giới Danh sách mail OWASP Top 10 là một tài liệu về bảo mật ứng dụng web. Nó thể hiện sự đồng thuận rộng rãi về những rủi ro bảo mật quan trọng nhất đối với các ứng dụng web. Các thành viên của dự án bao gồm nhiều chuyên gia bảo mật từ khắp nơi trên thế giới, những người đã chia sẻ kiến ​​thức chuyên môn của mình để tạo ra danh sách này. Xem thêm tại:  https://www.owasp.org Danh sách AWASP Top 10 qua các năm: OWASP Top 10 - 20

OWASP Top 10 Project - A3:2017 Sensitive Data Exposure

          Khi người dùng nhập bất kỳ thông tin trên ứng dụng web như thông tin thẻ VISA, Credit Card, hồ sơ bệnh án... đó đều là những dữ liệu nhạy cảm cần được máy chủ bảo vệ.           Hiện nay có rất nhiều ứng dụng web, lỗ hổng để truy cập dữ liệu nhạy cảm (Sensitive Data) ngày tăng.           Nguyên nhân dẫn đến các lỗ hổng trên là do: Không mã hóa dữ liệu nhạy cảm. Cài đặt mật khẩu để truy cập vào database chứa dữ liệu nhảy cảm yếu (độ dài mật khẩu, yêu cầu về các ký tự, chữ cái và các con số). Thực tế khách quan, một nhân viên bất mãn với các chính sách của công ty đặt nhiều mỗi đe dọa hơn bất kỳ người nào nào nhằm mục đích cá nhân khi có quyền truy cập vào những dữ liệu quan trong của công ty. Nếu dữ liệu được lưu trữ đám mây và nó không được bảo về đúng cách rất dễ ràng để đối tượng xấu lạm dụng. Hoặc có thể bạn vô tình ấn va

OWASP Top 10 Project - A2:2017 Broken Authentication

          Những đoạn chương trình kiểm tra danh tính và quản lý phiên làm việc của người sử dụng thường hay được làm qua loa không đúng cách. Vì vậy cho phép kẻ tấn công từ bên ngoài có thể truy cập vào những tài nguyên nội bộ trái phép (admin page, inside, control page …).           Những kẻ tấn công có quyền truy cập vào chỉ một vài tài khoản hoặc chỉ một tài khoản quản trị để xâm phạm hệ thống. Tùy thuộc vào miền của ứng dụng, điều này có thể cho phép rửa tiền, gian lận bảo mật xã hội và trộm cắp danh tính hoặc tiết lộ thông tin nhạy cảm được bảo vệ một cách hợp pháp.           Ví dụ: - Hiển thị phiên ID trong url:  http://example.com/sale/saleitems;jsessionid=2P0OC2JSNDLPSKHCJUN2JV?dest=Hawaii - Thời gian chờ của ứng dụng không được đặt chính xác: Khi bạn truy cập máy tính của thư viện. Thay vi ấn đăng xuất ứng dụng, bạn chỉ đóng tab ứng dụng và bỏ đi. Kẻ xấu có thể truy cập và ứng dụng với tài khoản và mật khẩu của bạn.