DANH MỤC TÀI LIỆU
Các lỗi bảo mật cơ bản trong Rails thường gặp trong thực tế
5 l i b o m t c b n trong Rails app hay g p trong th c t ơ ả ế
1. Thi u th i gian h t h n c a sessionế ế ạ
Nh trongư Securing Rails Applications ta bi t session hay còn g i là phiên ế ọ
làm vi c:
Sessions that never expire extend the time-frame for attacks such as cross-site
request forgery (CSRF), session hijacking and session fixation.
t m d ch làạ ị
Sessions s không bao gi h t h n s làm tăng th i gian cho các cu c t n ờ ế
công nh CSRF, session hijacking và session fixationư
M c dù, m t phiên không h t h n d ng nh phù h p v i quan đi m c a ế ạ ườ ư
ng i dùng (b i vì ng i dùng s trong tr ng thái đ c đăng nh p mãi, ườ ườ ẽ ở ượ
và s không c n ph i đăng nh p l i m i khi m l i ng d ng), nh ng đó ỗ ở ụ ư
là m t quan đi m r t t i t . Đi u đó s d n t i nguy c có ai đó s l y ơ ẽ ấ
tr m session c a user đ y, b i vì có m t tr ng h p nào đó, user đã quên ộ ườ
đăng xu t kh i máy tính m t n i công c ng nh 1 quán net ch ng h n, ở ộ ơ ư
do đó, session nên cài đ t th i gian h t h n. ế ạ
Gi i pháp
Cách đ n gi n nh t là cài đ t th i gian h t h n cho session trong initializer ơ ế ạ
c a config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, expire_after: 12.hours
V i config trên, session cookie s t đ ng h t h n trong 12 gi sau khi t o. ẽ ự ế
Tuy nhiên, ph ng pháp này có m t l h ng, đó là th i gian h t h n đ c ươ ỗ ổ ế ượ
cài đ t browser c a user. Khi đó, n u có ai đó chi m quy n ki m soát ặ ở ế ế
session cookie thì có th d dàng tăng th i gian h t h n b ng cách ch nh ể ễ ế
s a cookie.
Đ gi i quy t v n đ trên, th i gian h t h n nên đ c l u l i trên server.ể ả ế ấ ế ạ ượ ư ạ
N u b n dùng gem devise cho xác th c user, thì trong gem đó đã xây d ng ế ạ
module Timeoutable dùng cho xác đ nh m t phiên làm vi c c a user đã ệ ủ
đ c h t h n hay ch a. Đ s d ng nó, b n c n ph i include trong m t ượ ế ư ạ ầ
model user:
class User < ActiveRecord::Base
devise :timeoutable
end
Sau đó, b n có th cài đ t option ể ặ timeout_in trong initializer c a gem
devise, m c đ nh là 30 phútặ ị
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity.
# After this time the user will be asked for credentials again.
# Default is 30 minutes.
config.timeout_in = 30.minutes
M t cách khác là n u b n không thích dùng gem, b n có th t o model ế ể ạ
Session đ l u l i session c a user v i th i gian created_at và updated_at, ể ư
khi s d ng, chúng ta s lo i b các record đã h t h n.ử ụ ế
2. Thi u c ch khoá h th ngế ơ ế ệ ố
M t user có th c g ng đăng nh p vào h th ng bao nhiêu l n tr c khi ể ố ư
b ch n? N u h th ng c a b n là không gi i h n, đi u đó nghĩa là b n có ế ệ ố ớ ạ
m t l h ng b o m t l n. N u m t user có th c g ng k t h p nhi u ế ể ố ế
email và password mà không có m t s ngăn ch n gì, nghĩa là m t cu c t nộ ự
công có th x y ra. Có th là m t cu c t n công brute-force ho c ể ả
dictionary
T n công Brute-force là c g ng th k t h p t t c các kh năng có th . ố ắ ử ế
T n công Dictionary là cu c t n công g i ý d a vào m t t p danh sách các ộ ậ
g i ý ph bi n, g n nh t v i m t kh u c a user. ổ ế ấ ớ
Gi i pháp
Đ s a ch a v n đ này, user nên b khoá sau khi cung c p m t t p các k tể ử ế
h p không đúng các user name ho c email và m t kh u trong m t s l n ố ầ
c th .ụ ể
N u b n s d ng gem devise, gi i pháp cũng đ n gi n nh v n đ th ế ử ụ ơ ư ấ
nh t. Có m t model Lockable cho phép ch n truy c p đ n m t user sau khi ậ ế
có m t s l n c g ng truy c p không thành công. S l n đó có th đ c ố ầ ố ầ ượ
cài đ t b i h th ng, nh ng 5 th ng là con s phù h p. ố ư ườ ố ợ
Module cung c p 2 chi n l c m khoá: ế ượ
:time s m khoá user t đ ng sau m t kho ng th i gian đ c cài ự ộ ượ
đ t.
:email s g i m t email t i user khi tài kho n b khoá, ch a m t link ẽ ử ư
đ m l i tài kho n. ở ạ
M i m t cách có u nh c đi m riêng, nh ng quy t đ nh là d a vào b n, ư ượ ư ế ị
gem devise đã cung c p c 2 cách này.ấ ả
Ngoài ra , n u b n không s d ng gem, b n có th th c hi n m t gi i ế ử ụ
pháp đ n gi n h n, vd có th dùng captcha ch ng h nơ ả ơ
3. Li t kê, g i ý đ a ch email ị ỉ
Đó không ph i là m t v n đ nghiêm tr ng. B n th vào h th ng c a ộ ấ ệ ố
b n, chuy n đ n trang reset password. Đi u gì s x y ra n u b n cung c p ể ế ế ạ
m t email không liên quan gì đ n user c a h th ng? ế ệ ố
Hi v ng đó không tr v m t l i validate c a user v i m t thông báo là đ a ả ề
ch email không t n t i. B i vì, đó có th d n đ n m t cu c t n công, nó ể ẫ ế
giúp k t n công có th thu th p danh sách email t n t i trong h th ng.ẻ ấ
Hacker có th s d ng m t script t o ra hàng tri u request v i t p các đ a ể ử
ch email và d a theo các ph n h i c a h th ng đ xác đ nh email nào t n ồ ủ
t i. Tuy nhiên, b n có th ch n đ ng cách th c t n công này b ng cách ứ ấ
khoá user nh ph ng pháp trên.ư ở ươ
Gi i pháp
M t ng d ng nên ph n h i gi ng nhau khi m t user cung c p đ a ch ộ ứ
email cho m t user trong h th ng. Nh v y, k t n công s không th thu ẻ ấ
th p đ c các đ a ch email c a user.ậ ượ
N u b n s d ng gem devise, thì có m t config g i làế ử ụ paranoid v i h ng ớ ướ
d n trong tài li u làẫ ệ
It will change confirmation, password recovery and other workflows to
behave the same regardless if the e-mail provided was right or wrong.
t m d chạ ị
Nó s thay đ i xác nh n, khôi ph c m t kh u và các quy trình công vi c ụ ậ
khác đ ho t đ ng gi ng nhau b t k email đ c cung c p là đúng hay sai. ạ ộ ấ ể ư
Ho c n u b n không s d ng devise, b n nên đi u ch nh ng d ng c a ế ử ụ
b n đ tr v gi ng nhau n u m t user cung c p đ a ch email b sai ả ề ế
4. V t quy n, truy c p trái phép vào tài nguyênượ ề
Đ y là m t l i r t c b n, không nên có , nh ng cũng d x y ra n u ta ơ ả ư ễ ả ế
không c n th n. Gi s b n t o m t API m i, tr v các user trong project ả ử
d a theo id
GET https://my-rails-app.com/api/projects/:project_id
Khi g i m t ID c a project, s tr v danh sách user c a project đó. Tuy ả ề
nhiên, n u b n t o m t request cho m t project đ c qu n lý b i user ế ạ ạ ượ
khác.
B n có th quên vi c gi i h n tr v các user ch cho project c a user hi n ả ề
t i.
Có m t câu nói t ng k t l i v b o m t r t hay trong tài li u Rails: ế ề ả
As a rule of thumb, no user input data is secure, until proven otherwise, and
every parameter from the user is potentially manipulated.
t m d chạ ị
Theo nguyên t c chung, không có d li u đ u vào c a ng i dùng là an ữ ệ ườ
toàn, cho đ n khi đ c ch ng minh và m i thông s t ng i dùng đ u có ế ượ ố ừ ườ
kh năng b s a đ i. ị ử
Gi i pháp
Luôn luôn ghi nh vi c gi i h n truy c p tài nguyên v a đ nh t có th . ớ ệ ớ ạ
N u b n có th s d ng hàmế ể ử current_user, thì ta có th s a thành:ể ử
# Ban đ u
Project.find(params[:id])
# Chuy n thành
current_user.projects.find(params[:id])
thông tin tài liệu
Tài liệu tổng hợp 5 lỗi bảo mật cơ bản mà bạn thường hay gặp phải trong các ứng dụng Rail
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×