NKCV #4: [WordPress] Security

Là một trong những platform cho website phổ biến nên WordPress là đối tượng xâm nhập ưa thích của các hacker. Theo như thầy giáo mình từng nói thì không chỉ là website, mà kể cả các chương trình khác, hoặc những hệ thống phục vụ cuộc sống như khóa cửa tự động, blah blah, càng dễ cho người sử dụng thì lại càng yếu về an ninh, dễ dàng cho những kẻ có ý định xấu xâm nhập phá rối. Vì vậy khi chuẩn bị thiết kế một hệ thống thì luôn phải nghĩ đến an ninh đầu tiên, trước khi bàn đến các thứ khác (Nói đến đoạn này thì ổng gầm lên như kiểu thầy Moody Mắt Điên trong Harry Potter lúc nói “Phải cảnh giác!” ý =))). Cũng chả trách được, ổng dạy môn IT Security mà :))).

Trước thì bận tìm hiểu wordpress cơ bản, giờ mới bắt đầu tìm hiểu đến việc làm sao để nó khó bị hack hơn. Lưu ý: bài viết chỉ áp dụng cho những bạn có thể truy cập folder root của wordpress, không áp dụng cho blog wordpress tạo free.

1. Cập nhật

1.1 WordPress core, theme, plugins…

Với mỗi bản WordPress cập nhật, các developer sẽ thêm những chỉnh sửa quan trọng để nâng cấp platform và cả tính an ninh của nó nữa, vì vậy một cách đơn giản là giữ mọi thứ trong tình trạng cập nhật nhất có thể.

Tuy nhiên sau khi cập nhật WordPress, các plugin hiện tại hoặc theme có thể bị lỗi do không tương thích với phiên bản mới. Tệ nhật là chúng nó đình công luôn không thèm chạy nữa, tệ nhì là chúng nó đình công một phần, các phần không quan trọng thì vẫn chạy ngon (không biết cái nào tệ hơn nữa :)))). Cái này thì cũng tùy, có thể vài hôm sau các phần này sẽ được cập nhật theo bản mới nhất, nhưng có những plugin mà người viết đã bỏ không quan tâm đến nữa rồi thì có thể nó sẽ mãi không bao giờ được cập nhật (Méoo T_T).

Trước khi cập nhật thì nên tạo một bản backup để nếu mọi sự diễn ra quá tồi tệ thì mình có thể quay ngược lại được. Thường mình update trễ vài ngày để theme và plugins có bản tương thích rồi thì update tất cả cùng lúc luôn.

Có lần mình trải qua một tình huống khó xử là các plugin mình thích mãi ko có bản cập nhật. Lúc đầu mình định dùng WordPress bản cũ cho phù hợp nhưng nghĩ lại WordPress nó nâng cấp thường xuyên như thay áo, mình cứ bị bắt chết ở bản cũ thế này bất tiện chết đi được, thế là đành hy sinh cái plugin đó. Thật ra tên plugin là gì giờ cũng quên rồi, có lẽ nó cũng ko quá quan trọng =)))

1.2. Thông tin tài khoản FTP khi nâng cấp WordPress

WordPress có hai loại cập nhật là minor (những thay đổi nhỏ) và major (những thay đổi lớn trong hệ thống). Với dạng minor update thì thường nó sẽ tự động cập nhật luôn. Có một số trường hợp nếu server của bạn không có khả năng truy cập và viết file trực tiếp vào WordPress, nó sẽ hỏi thông tin tài khoản FTP để tiện cập nhật (một lần nữa, tất cả những thứ có chữ ĐỂ TIỆN đều rất đáng nghi =))))). Tuy nhiên trong trường hợp đó, nếu không thích cảm giác tài khoản mật của mình có thể bị lưu giữ đâu đó không rõ thì có thể define nó trực tiếp trong wp-config.php.

define( 'FTP_USER', 'username' );
define( 'FTP_PASS', 'password' );
define( 'FTP_HOST', 'ftp.example.org' );

Xem thêm: https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants

2. File wp-config.php

Thường thì file wp-config.php được lưu giữ ở folder wordpress, là file có chứa nhiều thông tin nhạy cảm. Trong trường hợp vì một lý do nào đó, mã PHP không hoạt động, file này sẽ bị hiển thị trần trụi theo dạng text và bất cứ ai cũng có thể đọc được nó (ặc).

Vậy, thay vì để file wp-config.php trong thư mục wordpress, ta có thể đưa nó ra ngoài, để ở folder root. Vì WordPress có cơ chế nếu nó ko tìm thấy file này  ở folder wordpress nó sẽ bò ra folder ở trên folder wordpress một level để tìm (^^!!). Cách này sẽ khiến nó tránh bị truy cập một cách vô ý. Tuy nhiên cách này chỉ thích hợp nếu folder cài wordpress của bạn không phải là folder root.

Có một cách khác để tránh file này bị người khác truy cập (áp dụng trên server Apache), là sửa vào file .htaccess: 

<files wp-config.php>
order allow,deny
deny from all
</files>

Xem thêm: https://codex.wordpress.org/Hardening_WordPress

3. Apache Permissions

Thông thường với file thì nên set permissions 644 còn folder thì 755. Với 777 thì tất cả mọi người truy cập đều có khả năng viết và sửa vào folder của bạn

permissions

Lưu ý là vụ này có thể dẫn đến một vài xô xát nhỏ với các plugin hoặc tính năng auto update vì thông tin tài khoản FTP sẽ bị hỏi (xem lại phần trên).

4. Mã hóa mật khẩu

Việc mã hóa mật khẩu cơ bản có 3 nấc:

Nấc 1 – Plain text, không mã hóa chi hết – Dễ nhất, đơn giản nhất và cũng dễ truy nhất là đặt và lưu mật khẩu dạng plain text. Ví dụ: xoaixanhchammuoi, conlonbeou123. Nếu có người truy cập được vào database họ sẽ đọc hiểu dữ liệu này dễ dàng. Thật ra việc này nếu chỉ để truy cập website thì ko nói làm gì, nhưng nhiều người có thói quen đặt 1 mật khẩu chung cho paypal và các thể loại đăng nhập khác nên hacker biết được mật khẩu rồi thì có thể sẽ đi trộm tài khoản của họ ở nơi khác nữa…

Nấc 2 – Mã hóa dạng hash md5 – mã hóa và lưu dạng mật khẩu đơn giản ở nấc 1 thành một chuỗi ký tự dài, như vậy dù hacker có truy cập được vào database thì chỉ thấy được chuỗi dài ký tự đó thôi. Dạng này tuy khó hơn nhưng ko phải tuyệt đối an toàn, vì có một số trang web chuyên giải mã md5, nếu mật khẩu của bạn quá đơn giản những trang web này sẽ crack ra được.

Nấc 3 – Salt – Muối đúng ko? Đúng rồi, thêm tí muối vào mật khẩu cho nó đỡ nhạt =))). Thật ra Salt là một chuỗi ký tự, ví dụ “jlkj234809801iwer”, nói chung chả có logic qué gì. Dạng mã hóa nấc 3 này sẽ ghép chuỗi salt với mật khẩu chính. Kiểu như mật khẩu của ta là “xoaixanhchammuoi” thì giờ nó sẽ thành “jlkj234809801iwerxoaixanhchammuoi”. Chưa hết. Sau đó ta sẽ dùng mã hóa nấc 2 dạng hash md5 để tiếp tục mã hóa cái chuỗi dài kinh khủng này. Ý đồ là dù nếu bạn có đặt một mật khẩu quá đơn giản đi nữa, thì sau quá trình mã hóa hai lần này thì nó cũng sẽ trở thành vô cùng phức tạp.

use salt in password

Thật ra nói loanh quanh từ nãy đến giờ cũng chỉ để giới thiệu về salt. WordPress sử dụng một kiểu mã hóa riêng là phpass, trong đó cho phép bạn thiết lập secret keys và salt trong file wp-config.php, đó là những dòng sau:

define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT','put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

Thay thế đoạn secret keys và salt của bạn vào chỗ ‘put your unique phrase here’.  Bạn có thể tự nghĩ chuỗi ký tự của mình hoặc truy cập vào đây để nhờ wordpress làm hộ:

http://api.wordpress.org/secret-key/1.1/salt

Chuỗi secret keys và salt do WordPress tạo giúp
Ví dụ chuỗi secret keys và salt do WordPress tạo giúp

5. Mấy cách nhỏ khác

– Đặt username khác với admin, vì nó là một cái tên rất dễ đoán ra

– Đặt tên table prefix trong database khác với wp-

– Limit Login Attempts: mình đang dùng plugin này để giới hạn 3 lần đăng nhập. Nếu không thành công, tài khoản sẽ bị khóa trong 20 phút.

– Đầu tư một cái password đủ khó nhưng cũng đủ để nhớ được. Tránh đặt pass kiểu 1234 hoặc abcd. Trong pass có các ký tự như !#”%&()=? để nâng cấp độ khó đoán và độ khó nhớ luôn =)))

5. Kết

Nói chung mình nghĩ nếu có người quyết tâm muốn tấn công website của mình thì không hỏng hẳn cũng sẽ bị hỏng vài phần. Nhưng với những người chỉ muốn tìm đối tượng nào đó để tấn công thì sẽ rất nhanh chóng bỏ qua các mục tiêu hơi-khó-nhằn một tí, thế nên chỉ cần quan tâm một chút đến vấn đề an ninh thôi cũng giúp website mình an toàn hơn những web khác nhiều rồi. Nhưng dù thế nào thì backup thường xuyên vẫn là cách tốt để giữ nội dung website.

Trong lúc thử nghiệm các phương pháp khác nhau mà phải chỉnh sửa file, mình nghĩ là nên có một note nhật ký, ghi ra tất cả những gì mình vừa làm, không phải chỉ để nhớ và học mà còn để biết đường làm lại mỗi khi có vấn đề gì đó xảy ra sau khi mình thay đổi một file =)). Nói chung dính mấy phốt rồi nên giờ sợ lắm huhu.

Nguồn: https://codex.wordpress.org/, Professional WordPress Design and Development Chap 13, udemy course The Complete Web Developer Course 

 

Trả lời

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

w

Connecting to %s

Blog tại WordPress.com.

Up ↑

Rau Cải Xanh

/sadalsuud/

jackie hobbies Blog

ĂN - NGỦ - CHƠI

Trang da diary

Vài điều linh tinh về Trang - và về thế giới của Trang.

Blog Chuyện Bâng Quơ

Muốn viết truyện hay phải liều viết truyện không hay trước đã.

Vân's Corner

Nơi chia sẻ vài thứ hay ho mà mình cực kì yêu thích :D

nguyen73gl

không có gì là không thể

Sora WD

Góc nhỏ để vày linh tinh

Zenle19's Blog

A Daydreammer. Don't let dreams be dream

Ngoc Anh Nguyen (Anna)

If You Want To Go Fast, Go Alone. If You Want To Go Far, Go Together

Mỳchay's DIARY

Lift up your HEAD, Princess... If not, THE CROWN falls...

DQD_HRH's Blog

Duyên số con người thật lạ, nhưng định mệnh đã sắp đặt cho chúng ta gặp nhau, tất có ý nghĩa nào đó ♫

%d bloggers like this: