Xu thế ngành công nghệ thông tin năm 2019

1. Machine Learning will advance Artificial Intelligence (AI) AI cars will drive us home.

Machine Learning (tiếng việt là Học máy) sẽ nâng cao trí tuệ nhân tạo nhất là trong lĩnh vực xe tự hành. Tương lai oto sẽ tự lái thay thế cho con người.
Mặc dù còn nhiều tranh cãi về vấn đề pháp luật nhưng xe tự lái sẽ là tương lai. Cứ cho về kỹ thuật và hạ tầng đáp ứng được về xe tự lái. Nhưng vấn đề đạo đức và tiến hành ra quyết định vẫn đang là một bài toán lớn. Ví dụ xe oto mất phanh, hoặc đâm vào 1 người ăn mặc lịch sự, hoặc đâm vào 5 người ăn mặc rách rưới? Đến con người còn rất khó để đưa ra quyết định này…

2. Quantum Computing (Supercomputing)

Máy tính lượng tử, về lĩnh vực này đã được nghiên cứu từ lâu rồi. Theo một số thông tin thì các nhà khoa học hoặc trong quân đội đã sản xuất thành công nhưng để ứng dụng vào lĩnh vực dân sự thì chưa do vấn đề bảo mật công nghệ… Máy tính lượng tử sẽ phá vỡ nhiều quy tắc hiện hành về lĩnh vực công nghệ thông tin hiện nay do tốc độ tính toán vượt trội: phá vỡ hàng rào mật khẩu hiện nay kể cả với các thuật toán mã hóa bảo mật cao cấp nhất…

3. Augmented Reality (AR) and Virtual Reality (VR)

Công nghệ thực tế tăng cường và thực tại ảo.

4. Global Internet of Things (IoT) security breach.

Vấn đề bảo mật trong Internet of Things, vạn vật đều kết nối internet.

5. Blockchain technology

Công nghệ Blockchain. Tiền ảo hot trong 1 khoảng thời gian và đã lao dốc, nhiều người giàu lên nhưng cũng nhiều người phá sản về đồng tiền này. Nhưng công nghệ lõi là Blockchain có nhiều ứng dụng thực tế hơn thế nữa… đa phần mới chỉ nhìn được phần nổi nhỏ của tảng băng chìm về ứng dụng của Blockchain.

Lập trình an toàn

Hôm nay mình được tham dự buổi đào tạo về lập trình an toàn. Đây là một buổi học đi kèm với gói đánh giá về bảo mật về hệ thống của công ty.
Nhìn chung buổi đào tạo cũng khá ổn, cung cấp cho mình thêm một số kiến thức nhất định nhưng cảm giác diễn giả còn lúng túng. Không nêu bật ra được vấn đề nhưng có thể đó là do dân kỹ thuật thường hay vậy.
Mình tóm tắt lại một số ý mình tiếp thu được như sau:

  • Lỗi XSS, lỗi này được khai thác dựa trên các input không được validate dữ liệu. Kẻ tấn công sẽ gửi cho người dùng URL của website chứa các tham số đã được định trước, các tham số này chứa các đoạn mã javascript thực thi mà kẻ tấn công muốn. Cách này cho người dùng tin vào đường dẫn đúng của website mình sử dụng.
    Để dễ hiểu hơn, bình thường mình gửi cho ai đó từ khóa để người ta tự tìm trên google, nhưng ta có thể gửi luôn URL mình thu được sau khi mình đã tìm kiếm. Nghĩa là mình copy cả URL luôn, nó sẽ chứa cả tham số loằng ngoằng rất dài đó.
  • Vẫn là lỗi XSS nhưng lỗi này nguy hiểm hơn. Do input không được validate dữ liệu nên kẻ tấn công cố tình chèn, lưu các đoạn script vào hệ thống như là comment, viết bài… Các đoạn script này được lưu vào DB và hiển thị ra nếu người dùng truy cập nên ai vào thì cũng bị dính. Các script này sẽ gửi thông tin tới máy chủ kẻ tấn công hoặc chứa mã đào tiền ảo…
  • Lỗi không kiểm tra input dẫn tới việc thực thi một số lệnh của máy chủ mà ta không mong muốn. Ví dụ ta có một tính năng thực thi một script shell hoặc chương trình nào đó với input được nhập vào thông qua input. Kẻ tấn công sẽ bổ sung thêm một số lệnh của OS để việc thực thi sẽ tiến hành thêm các lệnh mà kẻ tấn công muốn. Nguy hiểm như các lệnh xóa, khởi động hoặc làm gì đó từ phía hệ điều hành.
  • Lỗi SQL injection, lỗi này trước đây rất phổ biến nhưng giờ cũng nhiều người chú ý hơn. Đó cũng là việc không validate dữ liệu nhập từ input, kẻ tấn công sẽ thêm các mã lệnh sql để câu lệnh mình sử dụng với input sẽ sai lệch như: điều kiện sẽ là luôn đúng, drop table hoặc list ra toàn bộ thông tin của DB…
  • Lỗi XML, khi ta muốn sinh ra file XML dựa trên input của người dùng để một hệ thống khác sẽ thực thi. Tương tự SQL injection, kẻ tấn công sẽ thêm các ký tự, mã lệnh làm sai lệch nội dung XML để hệ thống thực thi sai.
  • Lỗi tải file không mong muốn lên. Ví dụ hệ thống có tính năng load file lên để xử lý. Nếu không validate loại file hoặc giới hạn các file được phép thực thi ở webserver thì kẻ tấn công có thể lợi dụng load các file mã độc, virut, shell script tự động thực thi các lệnh không mong muốn để chiếm quyền điều khiển hệ thống.
  • Lỗi cho tải file xuống. Ví dụ hệ thống cho nhập tên file để tải file log xuống, nếu không validate tên và phân quyền đúng đắn. Kẻ tấn công có thể thêm các đường dẫn khác nhau thường có ở hệ điều hành hoặc các file config hòng xem được.
  • Lỗi về việc phân quyền của người dùng có thể nhìn thấy được các dữ liệu của nhau. Ví dụ người dùng có thể xem được trang mà không được phân quyền, xem profile hoặc thực thi các việc mà không được phép. Diễn giả có đề cập thuật ngữ phân quyền dọc và ngang. Dọc là theo role đã chỉ định trước, ngang là ngang hàng có hay không được thực thi các công việc giống nhau.
  • Lỗi cho phép kẻ tấn công có thể sử dụng session của website đang thực thi để thực hiện các công việc tự động gì đó. Ví dụ người bị tấn công, khi đăng nhập vào ngân hàng, trình duyệt chứa một web ẩn thực thi lệnh chuyển tiền không mong muốn sử dụng chính session của người dùng.

Từ đó họ cũng đã khuyến cáo hoặc chỉ các khắc phục như sau:

  • Đặt mật khẩu lớn hơn hoặc bằng 8 ký tự, yêu cầu chứa cả ký tự đặc biệt và thường xuyên đổi mật khẩu.
  • Không lưu mật khẩu bằng text mà phải mã hóa trước khi lưu, ít nhất là hàm băm SHA125
  • ID user không nên cho số nguyên tự tăng mà sẽ sử dụng một quy tắc định trước như GUID…
  • Lưu ý tất cả input cần giới hạn độ dài phù hợp, luôn luôn phải validate input ở phía server
  • Cấu hình webserver được thực thi tự động một số file định trước
  • Giới hạn các quyền trên OS, các lệnh được thực thi, phân quyền thư mục…
  • Nếu sử dụng XML cần sử dụng DTD làm các header
  • Lập trình thao tác xuống CSDL tốt nhất nên sử dụng các procedure hoặc phải tham số hóa các input, tuyệt đối không dùng string để cộng chuỗi thành câu lệnh SQL.
  • Nghiên cứu sử dụng TOKEN, xác thực 2 lớp, JWT, capcha… để xác thực người dùng
  • Lưu ý với mỗi thực thi không những kiểm tra role của user mà nên quan tâm cả vùng thao tác của user (phân quyền ngang – dọc phù hợp)
  • Nghiên cứu học thêm các lỗi về Build code, config webserver, config hệ điều hành…
  • Khi code có thể sử dụng 1 số các plugin của IDE check lỗi code
  • Sử dụng các tool hoặc thuê các bên khác review, kiểm tra, quét ứng dụng thường xuyên.

Oracle đã và đang ứng dụng trí tệ nhân tạo trong sản phẩm Database

Nghe thiên hạ đồn oracle đang phát triển thế hệ Database mới với ứng dụng trí tuệ nhân tạo trong đó. Trí tuệ nhân tạo sẽ giúp hệ thống tự động nhận diện các lỗi phát sinh trong hệ quản trị cơ sở dữ liệu và tiến hành tự sửa chữa. Việc ứng dụng AI này hệ thống Database sẽ cần ít thao tác từ người quản trị hơn mà sẽ tự động quản trị, ví dụ như:

  • Trước đây người quản trị (DBA) sẽ theo dõi hệ thống và ra các quyết định tác động lên hệ thống, ở mức cao hơn sẽ tự động hóa bằng các job hay tool để monitor và tự xử lý với các rule đặt trước. Nhưng trí tuệ nhân tạo sẽ hoàn toàn bỏ qua phần này, hệ thống sẽ tự động xác định và xử lý mà không cần sự can thiệp của DBA.
  • Việc tinh chỉnh, tối ưu, turning câu lệnh SQL sẽ được hệ thống ứng dụng trí tuệ nhân tạo xác định và tiến hành tối ưu. Hệ thống sẽ tự phân tích để đánh index, tạo view, sử dụng bảng tạm, bảng phẳng để tối ưu các tiến trình.
  • Trí tuệ nhân tạo sẽ tự tối ưu các job, đồng bộ dữ liệu, cân bằng tải… tự đưa ra các chiến lược backup hiệu quả để tiết kiệm tài nguyên và tăng tính sẵn sàng cho hệ thống…
  • Việc lấy các báo cáo sẽ nâng cao tính động, nhanh hơn và có thể hiểu người ra yêu cầu một cách chính xác hơn.

Nhìn chung sẽ làm cho hệ thống Database trở nên thông minh hơn, công việc DBA sẽ nhẹ nhàng và nhàn hạ đi rất nhiều nhưng cùng với đó là công việc DBA sẽ ít dần và dần chuyển sang công việc khác. Tất nhiên con đường đó vẫn còn xa, việc tự động hóa toàn bộ cũng nảy sinh nhiều vấn đề mà khó có thể lường trước được.

Winservice và Job scheduler – crontab

Hôm trước có đồng nghiệp cũ hỏi mình config thời gian chạy của winservice tự động gửi lại tin nhắn nằm ở đâu? Thực ra vòng vo một hồi thì đó là 1 cái Job chạy 5 phút 1 lần kiểm tra xem hàng đợi gửi tin nhắn xử lý có bị tồn không để thông báo tới admin để kiểm tra hệ thống. Về hệ thống này mình sẽ trình bày ở một bài khác.
Nhân tiện việc này mình muốn chia sẻ sự hiểu biết của mình về Winservice và Scheduler – Crontab:

  • Winservice: mình đã tiếp xúc với winservice sớm hơn trong công việc. Winservice bản chất là một chương trình thực thi một khối lệnh nào đó hoặc công việc nào đó lặp đi lặp lại sau một khoảng thời gian nghỉ nào đó. Ví dụ như ta phải dán con hạc giấy đã được gấp lên một bước tường chẳng hạn, ta cứ dán được 1 con lên thì ta lại ngồi nghỉ 5 phút chẳng hạn. Ta không quan tâm dán nó trong bao lâu 1 phút, 2 phút hay 5 phút… miễn là cứ dán xong thì ta ngồi nghỉ 5 phút rồi dán tiếp. Ứng dụng của Winservice là xử lý hàng đợi – queue, trong hàng đợi ta không cần biết có bao nhiêu, cứ lấy 1 cái (có thể random hoặc cái đầu hàng đợi hoặc cuối hàng đợi…) đem ra để xử lý xong rồi nghỉ một thời gian nào đó rồi lại vào lấy 1 cái… tất nhiên hàng đợi có thể tiếp tục được cập nhật hoặc không, hoặc có thể cập nhật ở một thời điểm bất kỳ nào đó. Do vậy với winservice ta không thể biết trước khi nào thì một khối lệnh hoặc công việc mới được thực hiện do ta không nắm được khối lệnh đó hoặc công việc được xử lý trong bao lâu. Cứ phải xong thì mới thực hiện các việc tiếp theo. Đối với Winservice ta có thể làm xử lý 1 luồng nhưng để hiệu quả ta có thể làm nó chạy đa luồng (nghĩa là các công việc xử lý song song nhau) nhưng nếu sử dụng chung tài nguyên thì rất dễ xảy ra xung đột dẫn đến bị deadlock và winservice bị treo không chạy được nữa. Ta buộc phải xử lý khéo léo khi code trong vấn đề này, và việc này xảy ra là chuyện bình thường.
  • Scheduler – Crontab: Cũng như Winservice, Scheduler – Crontab (mình không rõ tên của nó nên đang dùng tên lần lượt mà hệ đều hành Window và Linux cung cấp cho người dùng) cũng thực thi một khối lệnh hoặc công việc nào đó nhiều lần nhưng được xác định thời gian bắt đầu của công việc đó. Ví dụ với việc dán hạc giấy, thì cứ đầu từng giờ ta tiến hành dán một con hạc giấy, việc dán này không cần biết có xong hay không, nhanh hay chậm, cứ đầu từng giờ là lấy 1 con hạc lên gián mà thôi. Như vậy có thể lần giờ trước ta dán chưa xong thì tới lần giờ tiếp theo ta sẽ vẫn lấy 1 con hạc đem đi dán.

Một số ứng dụng của Winservice và Scheduler – Crontab mà mình biết như sau:

Winservice:

  • Xử lý hàng đợi nạp tiền của khách hàng: Ví dụ hàng trăm nghìn tin nhắn nạp thẻ đến trong 1 phút của nhà mạng, nhà mạng chắc chắn sẽ dựng queue để đón nhận các yêu cầu này và lần lượt lấy 1 hoặc 1 số giao dịch để đem đi xử lý. Có thể nghỉ 1 chút lại tiếp tục lấy để xử lý……

Scheduler – Crontab: Các phần job chạy theo năm – tháng – giờ – phút – giây như:

  • Job backup hệ thống vào cuối mỗi ngày
  • Job kiểm tra cứ 5 phút lại check hệ thống hoặc tác vụ gì đó như winservice còn sống không để thông báo
  • Job gửi dữ liệu vào ngày đầu tháng tất cả số liệu của tháng trước

Winservice và Scheduler – Crontab có các tính chất và ưu nhược điểm khác nhau nên tùy từng tác vụ cụ thể ta phải xem xét và sử dụng cho phù hợp.

Học và ứng dụng DATA SCIENTIST, AI, MACHINE LEARNER với KAGGLE

KAGGLE: học tập và áp dụng kiến thức vào các Project về DATA SCIENTIST, AI, MACHINE LEARNER

Kaggle là nơi để những người nghiên cứu về data science có thể chia sẻ kiến thức, dữ liệu và những người mới nghiên cứu về machine learning có thể học tập, tìm kiếm tài liệu, tham gia các cuộc thi và áp dụng các kiến thức này vào các project thực tế.