Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_MatchesMapRegex has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/class-wp.php on line 632

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Translation_Entry has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/entry.php on line 14

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_Reader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 12

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_FileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 120

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_StringReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 175

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_CachedFileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 221

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_CachedIntFileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 236

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_Widget_Factory has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/widgets.php on line 544

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdSense has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 38

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsWidget has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 941

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsSearch has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 1003

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsLU has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 1078

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzBaseOption has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 22

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzCheckBox has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 174

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzRadioBox has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 199

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzSelect has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 250

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzMessage has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 294

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzHelpTag has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 313

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzHelpPopUp has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 328

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzTextArea has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 346

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzText has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 366

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzSubmit has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 385

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzColorPicker has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 409

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzOneTab has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 432

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzMiniTab has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 476
Tổng quan về CSRF - PHP Cơ Bản

Tổng quan về CSRF

 

TỔNG QUAN VỀ CSRF

 

I. CSRF là gì

Kỹ thuật tấn công CSRF hay còn gọi là kỹ thuật tấn công “Cross-site Request Forgery“, nghĩa là kỹ thuật tấn công giả mạo chính chủ thể của nó. Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh HTTP từ người sử dụng, sau đó thực thi các câu lệnh này.

Hacker sử dụng phương pháp CSRF để lừa trình duyệt của người dùng gửi đi các câu lệnh http đến các ứng dụng web. Trong trường hợp phiên làm việc của người dùng chưa hết hiệu lực thì các câu lệnh trên sẽ dc thực hiện với quyền chứng thực của người sử dụng.

CSRF còn dc gọi là “session riding“, “XSRF”

II. Lịch sử về tấn công CSRF

Các kiểu tấn công CSRF xuất hiện từ những năm 1990, tuy nhiên các cuộc tấn công này xuất phát từ chính IP của người sử dụng nên log file của các website k cho thấy các dấu hiệu của CSRF. Các cuộc tấn công theo kĩ thuật CSRF k dc báo cáo đầy đủ, đến năm 2007 mới có một vài tài liệu miêu tả chi tiết về các trường hợp tấn công CSRF.

Vào tháng 2 năm 2008, khoảng 18 triệu khách hàng trên eBay tại trang auction.co.kr tại Hàn Quốc đã bị mất thông tin cá nhân. Cũng trong năm 2008 này, nhiều khách hàng của một ngân hàng Mexico cũng bị tấn công bởi một email có chứa thẻ image. Link của image này sẽ chuyển đổi DNS trong router của nạn nhân, khiến cho khi họ truy cập vào trang web của ngân hàng sẽ dẫn tới trang mạo danh, lừa đảo. Trong 2 trường hợp kể trên hacker đều sử dụng kĩ thuật tấn công CSRF.

III. Kịch bản tấn công

Người dùng A duyệt diễn đàn của mình. Một người dùng khác, B đăng tải 1 thông điệp lên diễn đàn. Giả sử rằng B có ý đồ k tốt và anh ta muốn lấy tiền từ những người có tài khoản tại ngân hàng như AB sẽ tạo 1 thông báo, trong đó có chèn 1 đoạn code như sau:

trong đó sender là người gửi tiền, receiver là người nhận tiền và amount là số tiền chuyển. Hiển nhiên là đường link này chỉ được người A thực thi, vì thế nên phải có một thao tác kiểm tra sender chính là người thực thi đường link. Tuy nhiên, đoạn code trên được che giấu rất kỹ:

  • Thứ nhất: nó thêm một thông điệp bình thường khiến người dùng không chú ý.
  • Thứ hai: thẻ <img> được gán thêm vào với kích thước 0x0 pixel khiến người dùng không thể thấy được.

Giả sử A đang đăng nhập tài khoản ngân hàng của mình và chưa đăng xuất để kết thúc thì Trình duyệt của A sẽ gửi câu lệnh HTTP GET đến địa chỉ lưu trong thẻ “<img>” trong đoạn mã trên và nó sẽ dc thực hiện bằng quyền chứng thực của A.

Trong ví dụ trên hacker có thể sử dụng 1 URL khác, ví dụ: http://www.phpcoban.com/admin/project/1/delete để xóa đi một dự án quan trọng nào đó mà A đang làm.

Các kĩ thuật CSRF rất đa dạng, lừa người dùng click vào link, gửi email chứa các đoạn mã độc đến người dùng…

  IV. Cách phòng chống

Để ngăn chặn CSRF, có hai phương pháp thường được sử dụng:

1. Sử dụng token

Phương pháp thứ nhất là chèn thêm token vào đường link thực hiện thao tác. Giá trị token này phải mạnh, khó đoán, thường là hash của session ID của user kết hợp với password, IP của user, thời điểm đăng nhập,…Mục đích của token là làm cho hacker không thể xác định được chính xác đường link thực hiện thao tác.

Với ví dụ ở trên, ta thêm biến token vào thì đường link có dạng:

http://www.xyzbank.vn/sendfund.php?sender=A&receiver=B&amount=1000000000&token=6asdkasd6ocucs

Giá trị của biến token được sinh ra ngẫu nhiên hoặc tùy theo thuật toán của lập trình viên. Trong file sendfund.php sẽ có một hàm sinh ra token này và kiểm tra xem có khớp với giá trị token trên URL không, nếu không khớp thì thao tác chuyển tiền trên không được thực hiện.

Điểm yếu của phương pháp này là khi giá trị token bị lộ và khi trang web sử dụng ajax sẽ không load lại trang sẽ khiến mã token này không sinh ra khiến nó trở nên vô dụng.

2. Chèn bước xác nhận trung gian trước những thao tác nhạy cảm

Có thể yêu cầu user nhập lại mật khẩu để xác nhận thao tác thực hiện hoặc yêu cầu nhập captcha.

Các dịch vụ thanh toán (ngân hàng, chứng khoán) thường yêu cầu user sử dụng thêm OTP (One-time password) hoặc chứng thư số để xác nhận lại các giao dịch.

Sau bài viết này mình mong các bạn có những hiểu biết đầu tiên về CSRF và các cách phòng tránh cơ bản. Cảm ơn các bạn đã theo dõi và hẹn gặp lại ở các bài tiếp theo.

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">