Bảo mật trong PHP

Hàng ngàn vạn cách tấn công vào một website ! hôm nay mình xin chia sẻ vài điều siêu siêu nhỏ về vài vấn đề lặt vặt các bạn có thể không để ý khi lập trình ,
  1. Khi truyền tin trên mạng ( tức là khi nhấn nút submit) mình phải mã hóa các thông tin của mình bằng cách mã hóa dữ liệu gửi đi và sử dụng phương thức truyền SSL (mình cũng chưa rõ thằng này là như thế nào nhưng cứ biết thế đã) là https://.
  2. Phương thức method của đối tượng form có 3 phương thức là: POST, GET, PUT(cái này thì mình chưa dùng bao giờ). Phương thức POST được dùng khi truyền dữ liệu mà không ghi lại giá trị ở Server và client, còn phương thức GET sẽ lưu lại các thông tin ở server và client vì các giá trị mà GET truyền đi được lưu giữ trên URL. Do vậy khi truyền các thông tin qua mạng ta nên dùng POST hơn là GET
  3. Thẻ input kiểu text dùng khi người dùng nhập liệu vào ta phải kiểm tra cả ở client và server thì mới đảm bảo được tính đúng đắn của dữ liệu và tránh bị hacker quấy rối. Giả sử ta có form login với 2 ô text box để nhập username và password. Trên client ta phải sử dụng javascript(hoặc VBScript) để ngăn người sử dụng nhập các kí tự đặc biệt ( như dấu ',--,/*...). Khi viết xong hàm kiểm tra này thì đa số mọi người (trong đó có cả mình ) đã nghĩ thế là xong. Nhưng hacker vẫn có thể vượt qua được hàng rào của chúng ta bằng cách View source trang login, sửa lại code kiểm tra thông tin nhập liệu sau đó save lại và gửi các giá trị mà hacker mong muốn lên server mà không bị kiểm tra gì nữa. Do đó cả ở client và server ta đều phải có các phương thức kiểm tra dữ liệu của người sử dụng đưa lên. Một điều cần quan tâm nữa đó là ta phải giới hạn số lượng kí tự mà người dùng đưa lên, nếu không một số người xấu tính sẽ nhập vô số kí tự vào hộp text của chúng ta( hàng nghìn, hàng triệu...) dẫn tới server bị quá tải và có thể gây hỏng hệ thống.
  4. Thẻ input kiểu hidden :dùng khi truyền thông tin lên server mà không muốn người dùng biết.Cách làm này có lợi nhưng cũng có hại. Cái lợi ở đây là không giống như GET, ta có thể truyền giá trị mà người sử dụng không thấy được, nhưng cái hại là hacker có thể view source và xem được giá trị của chúng ta. Do vậy, nếu sử dụng thẻ input kiểu hidden thì ta phải mã hóa giá trị của nó thì mới hạn chế được sự tấn công của hacker
  5. Lỗi khi dùng hàm include: khi dùng hàm này ta phải cẩn thận vì hacker có thể lợi dụng để truy cập vào các thư mục không được phép.
    ví dụ ta có 1 đoạn lênh sau :
    $directory=$_GET['dir'];
    if($directory!="") include($directory);
    hacker có thể nhập đoạn giá trị trên thanh URL: http://example.com/test.php?dir=../../password
    Ta có sơ đồ thư mục như sau: root/home/test
    với giá trị như trên hacker có thể quay ngược lạ thư mục gốc và vào thư mục chứa password, lúc đó thì điều gì cũng có thể xảy ra