Thành Phạm's Blog
  • Ding Talk
    • Wapbuider
    • Wordpress
    • XenForo
    • Theme XenForo
    • Theme Wordpress
    • Hacking - Bảo mật
    • JohnCMS
    • All Shared Code
    • Blogger
    • Template Blogger
  • Học Lập Trình
    • Scritp - Js
    • Php - MySql
    • Html - Css
    • C#
    • Pascal
  • Đồ Hoạ
    • PhotoShop
    • PSD Tổng Hợp
    • Action
    • Fonts Tổng Hợp
    • ProShow Produce
    • Style Produce
    • AegiSub
  • Thủ Thuật
    • Thủ Thuật
    • Wapmaster
    • Blogger
    • Facebook
    • SEO
    • Kiếm Tiền Online
    • Chia Sẻ Coupon
  • Follow me
    • Twitter
    • Facebook
    • Google+
    • Youtube
    • ­­­



Trang chủ / Bảo mật / Cơ sở dữ liệu / Database / Dữ liệu rò rỉ / Mật khẩu / Security / SQL / Chức năng đăng nhập, tưởng dễ mà khó

❤ Chức năng đăng nhập, tưởng dễ mà khó ❤

9/06/2018 01:11:00 PM   Bảo mật , Cơ sở dữ liệu , Database , Dữ liệu rò rỉ , Mật khẩu , Security , SQL   0  
Popular Posts
Đăng nhập là một chức năng đơn giản nhất mà hơn 90% các ứng dụng web cần phải có. Tuy nhiên, đôi khi ta lại không được hướng dẫn cách thực hiện chức năng “Đăng nhập”
một cách đúng đắn, bài bản, dẫn đến những lỗi dở khóc dở cười, hoặc những lỗ hổng bảo mật khủng khiếp. Đến cả Lotte Cinema, một trang web được khá nhiều người dùng còn mắc lỗi sơ đẳng này.



Đăng nhập hả? Chỉ cần một bảng User, hai cột Username và Password là xong

Kể cũng buồn cười. Ngày xưa khi đi học, mình được hướng dẫn cách làm chức năng đăng nhập như thế này.
  1. Người dùng nhập tên tài khoản (email) và mật khẩu.
  2. So sánh tên tài khoản và mật khẩu với thông tin trong database.
  3. Nếu đúng, cho người dùng đăng nhập, lưu thông tin vào session hoặc cookies.
Bước 1 và 3 không có gì đáng bàn, nhưng bước 2 mới là điều đáng nói. Đa phần tụi mình đều lưu trực tiếp tên tài khoản và mật khẩu vào database, sau đó đem ra so sánh.
public void Register(string username, string password)
{
  Database.SaveUser(username, password);
}
 
public bool Login(string username, string password)
{
  string pw = Database.GetPasswordByUsername(username);
  return pw == password;
}
Đây là cách củ chuối nhất và ngu nhất. Database là một trong những nơi hay bị tấn công, dễ làm thất thoát dữ liệu. Trong quá khứ, lỗi SQL Injection từng làm thất thoát hàng triệu thông tin khách hàng và thông tin credit card. Chưa tính đến chuyện hacker bên ngoài, nhiều khi thằng Database Admin hứng lên, nó có thể mò được mật khẩu của khách hàng, lớn chuyện chưa?

Cách lưu trữ mật khẩu đúng phải là làm sao để chỉ người dùng mới biết được mật khẩu của họ.

Vậy mã hóa là được chứ gì, lắm trò!!

Ừ, cách giải quyết cũng khá đơn giản. Bạn có thể dùng hàm hash để mã hóa mật khẩu như sau:
  1. Sử dụng hàm hash (hàm băm) để mã hóa mật khẩu của người dùng.
  2. Lưu trữ mật khẩu này dưới database.
  3. Khi người dùng đăng nhập, hash mật khẩu đã nhập, so sánh với mật khẩu đã lưu dưới database.
  4. Hàm hash này phải là hàm hash một chiều, không thể dựa theo mật khẩu đã hash để suy ngược ra đầu vào.
public void Register(string username, string password)
{
  string hashedPassword = HashHelper.Hash(password);
  Database.SaveUser(username, hashedPassword);
}
 
public bool Login(string username, string password)
{
  string pw = Database.GetHashedPasswordByUsername(username);
  return pw == HashHelper.Hash(password);
}
Cách này đảm bảo chỉ người dùng biết mật khẩu của họ, dù là lập trình viên hay database admin, có nắm được cả code lẫn database cũng không tài nào mò ra mật khẩu. Tuy nhiên, cách này có một vấn đề: Hai mật khẩu giống nhau khi hash sẽ có kết quả giống nhau. Hacker có thể mò ra mật khẩu bằng cách dùng dictionary attack – hash toàn bộ các mật khẩu có thể trong từ điển, rồi so sánh kết quả với mật khẩu đã hash dưới database.

Thế nhưng, vỏ quýt dày có móng tay nhọn. Đây là cách lưu trữ mật khẩu đúng mà hiện nay các framework đều áp dụng:
  1. Khi tạo mật khẩu, tạo random một chuỗi kí tự gọi là salt.
  2. Salt sẽ được cộng vào sau mật khẩu, toàn bộ chuỗi mật khẩu và salt sẽ bị băm (hash).
  3. Lưu salt và giá trị đã băm xuống database (Một người dùng sẽ có 1 salt riêng).
  4. Khi người dùng đăng nhập, lấy salt của người dùng, cộng nó với mật khẩu họ nhập vào, hash ra rồi so với giá trị trong database.
public void Register(string username, string password)
{
  string salt = SaltHelper.getRandomSalt();
  string hashedPassword = HashHelper.Hash(password + salt);
  Database.SaveUser(username, hashedPassword, salt);
}
 
public bool Login(string username, string password)
{
  string salt = Database.getSaltByUsername(username);
  string pw = Database.getHashedPasswordFromUsername(username);
  return pw == hash(password + salt);
}
Với cách này, khi người dùng quên mật khẩu, hệ thống không tài nào mò ra mật khẩu để gửi cho họ. Cách giải quyết duy nhất là reset mật khẩu, random ra một mật khẩu mới rồi gửi cho người dùng.

Ối giời phức tạp thế, cùng lắm thì lộ password trên trang của mình thôi mà

Nói nhỏ một bí mật (mà chắc ai cũng biết) cho các bạn nghe nè: Hầu như người dùng chỉ sử dụng 1 username/mật khẩu duy nhất cho toàn bộ các tài khoản trên mạng. Nếu hacker tìm được mật khẩu từ trang của bạn, chúng sẽ thử với các account facebook, gmail, tài khoản ngân hàng, … của người đó. Mất 1 account là xem như mất sạch sành sanh. Kinh khủng chưa!. Không tin à, bạn thử ngẩm lại xem, bạn có dùng chung 1 email/mật khẩu cho Gmail, Facebook, Evernote, … và nhiều trang khác không?




Copy gần hết rồi thì cũng cố nốt phần “Lỗ hổng bảo mật khủng khiếp của Lotte Cinema”


Một ngày đẹp trời nọ, mình định dẫn gấu đi xem phim, ăn uống rồi *beep*. Định đặt vé online mà quên mất mật khẩu lottecinema.com, mình mò mẫm phần đăng nhập, tìm hoài mới thấy mục “Quên mật khẩu”. Nhập địa chỉ mail và chứng minh nhân dân, mình mau chóng nhận được một email gửi từ lottecinema, trong đó có cả username và mật khẩu của mình.

Thật là tiện quá đi mất, khỏi phải reset mật khẩu. Khoan, có cái gì sai sai ở đây!! Vậy là bọn lotte lưu thẳng mật khẩu vào database à. Lỡ database bị thất thoát dữ liệu là toàn bộ các tài khoản khác của mình (Và các thành viên lotte cinema khác) cũng đi tong theo. Thật là đáng sợ!! Lỗi này mình phát hiện năm ngoái, đến cách đây mấy ngày vẫn còn y nguyên. Thế mới biết bộ phận IT của lottecinema giỏi giang thế nào. Các bạn có tài khoản lotte cinema thì nhớ cẩn thận nghe.
Nguồn : mrcyclo.com
Share Share Share
Bảo mật Cơ sở dữ liệu Database Dữ liệu rò rỉ Mật khẩu Security SQL
Administrator Administrator: Phạm Chí Thành

Không điều gì là tồn tại mãi mãi cho đến lúc bạn ngừng cố gắng! Một cậu học sinh trung học luôn có ước mơ và hoài bão...Bạn hãy làm những việc bình thường bằng lòng say mê phi thường, thành công sẽ đến với bạn!!

CÓ THỂ BẠN SẼ THÍCH

Đang tải...

No comments

Bài đăng mới hơn Bài đăng cũ hơn Trang chủ

THEO DÕI BLOG

  • Bạn bè
  • Nhận xét

ADS

Bài đăng phổ biến

  • File excel dự trù chi phí mở quán cafe
    File excel dự trù chi phí mở quán bia quán cafe và nhiều cái khác Khi mở quán bia quán cafe, hay kinh doanh bất kỳ cái gì, chúng ta đều cần ...
  • 1 Click Tạo Usb Boot UEFI-Legacy Phân Vùng Ẩn Đa Năng Với Mini Win (WinPE)
    Tính năng của Anhdv Boot Đây là nơi bạn có thể xem chi tiết các tính năng của Anhdv Boot. Anhdv Boot là bộ công cụ cứu h...
  • Chữ ký cuộc gọi cho thuê bao Mobi, Vina, Viettel chỉ từ 6 ngàn/tháng
    Chữ ký cuộc gọi là gì? iSign Plus biến màn hình cuộc gọi nhàm chán thành nơi chia sẻ cảm xúc. Chữ ký cuộc gọi: Là dịch vụ ...

Chuyên Mục Hot

    4.0 là gì AIO Win Amazon Go ATM Bắc Kim Thang Bán hàng Bán hàng đắc nhân tâm Bảo hiểm bảo hiểm lừa đảo Bảo hiểm nhân thọ Bảo mật Bảo mật blog Cách mạng 4.0 Cài Driver đầy đủ nhất chỉ một file Chữ ký cuộc gọi Cơ sở dữ liệu Cổ tích Computer Công nghệ Công nghệ 4.0 Công nghệ xe mới Cuộc sống Cứu hộ máy tính free cydia Đánh giá Honda Jazz RS DanTriSoft Guide DanTriSoft Res Database Để trở thành một best seller Đổi số điện thoại từ 11 số thành 10 số domain Driver máy in hoá đơn Driver Windows Dữ liệu rò rỉ E-business E-commerce ebook error Excel Facebook Font chữ Gia đình Hàng hoá file excel HDMI port Honda Honda Jazz RS How to do Hướng dẫn in mã vạch số lượng lớn Hướng dẫn sử dụng In mã vạch In mã vạch từ CSDL SQL Server In mã vạch từ Excel Insurance Internet ios iSign jail break Kiến thức Marketing Kinh doanh Kinh doanh Nhà hàng Kinh nghiệm về bán hàng Kinh tế Kinhdoanh Mã Hóa Dữ Liệu Mastercard Mật khẩu Máy in hoá đơn Máy tính Mstatus Mua sắm trực tuyến news Nghệ thuật bán hàng hiệu quả Nghệ thuật Sale Order bằng Smartphone Phần mềm Quản lý kho Racing Spirit Recovery Rush Sex Security Shortcode Software SQL SQL Lan - Internet Store house Sứ mệnh cách mạng 4.0 Sự nghiệp hay tình yêu sự thật của bảo hiểm trọn đời. Tâm lý Teamview Technologies Thành công Thanh toán điện tử Thanh toán online Thanh toán quốc tế Thanh toán trực tuyến Thẻ Mastercard là gì Thủ thuật Thủ thuật Thủ thuật Kinh doanh Thương mại điện tử Tiêu dùng Tìm font qua hình ảnh Tình cảm Tool đổi số điện thoại Trial end Truyện Tuổi trẻ USB cứu hộ USB Win PE Video HDMI Virus Visa vSign Wifi Xe và đời sống
Copyright © 2015- | Thủ thuật - Công Nghệ - Webmaster | All Right Reserved.
Tags : Share Code / PhoToShop / FaceBook Tips
Blog Được Phát Triển Bởi