CHIASE123.COM - Diễn đàn chia sẻ kiến thức

Diễn đàn chia sẻ kiến thức
Thứ Hai, 13:11:09 - 25/11/2024

Thời gian được tính theo giờ UTC + 7 Giờ




Tạo chủ đề mới Gửi bài trả lời  [ 1 bài viết ] 
Người gửi Nội dung
Gửi bàiĐã gửi: 01/09/2024 00:51 
Ngoại tuyến
☀️1/30☀️
☀️1/30☀️
Hình đại diện của thành viên

Ngày tham gia: 13/03/2012 14:48
Bài viết: 2
[PHP] Ngăn chặn, phòng ngừa SQL Injection

I - SQL Injection là gì?

- Sql injection (SQLi) là một kỹ thuật hack web bằng cách lợi dụng các lỗ hổng và truy vấn trong các kênh đầu vào của ứng dụng web để chèn thêm một đoạn SQL, làm sai lệch câu truy vấn ban đầu.

- mục đích nhằm khai thác, ăn cắp hay xáo trộn các thông tin, dữ liệu nằm trong phần cơ sở dữ liệu của web - nơi có những dữ liệu có giá trị và nhạy cảm nhất.

- Sql injection cho phép những kẻ tấn công website có khả năng thực hiện được các thao tác tương tự như một người quản trị web. Điều này không những gây cản trở sự hoạt động của ứng dụng mà thậm chí họ còn chiếm được quyền truy cập quản trị vào các máy chủ.

- các cuộc tấn công SQL Injection giúp hacker giả mạo danh tính, làm xáo trộn dữ liệu, làm mất hiệu lực giao dịch, thay đổi số dư, tiết lộ hoặc phá hủy dữ liệu trên hệ thống. Thậm chí, nó có thể khiến dữ liệu trở nên không khả dụng hoặc đạt được quyền quản trị của máy chủ cơ sở dữ liệu.

- Xem xét đoạn code PHP với cơ sở dữ liệu MySQL xử lý input chứa lỗ hổng SQL injection sau:
Mã:
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";

mysql_query($query);

- dễ dàng nhận thấy đoạn code trên đang tiềm ẩn nguy cơ bị tấn công SQL injection do không có cơ chế ngăn chặn nào với các giá trị người dùng nhập vào câu lệnh truy vấn SQL


II - Các biện pháp ngăn chặn, phòng ngừa SQL Injection

1. Sử dụng hàm addslashes() kết hợp với hàm htmlspecialchars() trong PHP
- Hàm htmlspecialchars() sẽ chuyển các ký tự đặc biệt như &, <, >, ", ', và / thành các ký tự HTML
- Hàm addslashes() thêm dấu gạch chéo \ trước các ký tự đặc biệt như dấu nháy đơn ', dấu nháy kép ", dấu chấm phẩy ; và dấu gạch chéo \ trong chuỗi. Ví dụ khi người dùng nhập giá trị cho biến $username là ' OR 1=1 -- sau khi sử dụng hàm trên sẽ trở thành \' OR 1=1 --. Câu truy vấn khi đó: SELECT * FROM users WHERE username = '\' OR 1=1 --' trở nên an toàn
Mã:
$username = addslashes(htmlspecialchars($_POST['username']));
$password = addslashes(htmlspecialchars($_POST['password']));


2. Sử dụng hàm mysql_real_escape_string() , mysqli_real_escape_string() , sqlite_escape_string() và các hàm tương tự
- Hàm mysqli_real_escape_string() là một hàm trong PHP dùng để ngăn chặn lỗ hổng SQL injection. Nó sẽ chuyển các ký tự đặc biệt trong chuỗi như ', ", ;, ... thành các ký tự hợp lệ để truy vấn cơ sở dữ liệu
Mã:
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);


3. Sử dụng PDO prepared statements
- PDO prepared statements sử dụng các câu lệnh SQL được thực thi trước đó để tránh các lỗ hổng bảo mật như SQL injection. Đồng thời nó cũng giúp tối ưu hóa các truy vấn và tăng tốc độ truy vấn.
Mã:
// Tạo một đối tượng PDO:
$db = new PDO('mysql:host=localhost;dbname=myDatabase', $user, $pass);

// Tạo câu lệnh SQL cần thực thi:
$sql = "SELECT * FROM users WHERE username = :username";

//Tạo một đối tượng PDOStatement:
$stmt = $db->prepare($sql);

// Gán giá trị cho các tham số trong câu lệnh SQL:
$stmt->bindParam(':username', $username);

// Thực thi câu lệnh:
$stmt->execute();

// Lấy kết quả trả về:
$result = $stmt->fetchAll();


4. Kiểm tra kiểu dữ liệu đầu vào
- kiểm tra xem dữ liệu đầu vào có đúng với kiểu dữ liệu mong muốn hay không? PHP có nhiều hàm xác thực đầu vào, từ những hàm đơn giản nhất có trong Variable handling FunctionsCharacter Type Functions ( ví dụ: is_numeric() , ctype_digit() ) cho đến các Biểu thức chính quy (Regular Expression)


Đầu trang
 Xem thông tin cá nhân Gửi Email  
 
Hiển thị những bài viết cách đây:  Sắp xếp theo  
Tạo chủ đề mới Gửi bài trả lời  [ 1 bài viết ] 

Thời gian được tính theo giờ UTC + 7 Giờ


Chủ đề tương tự
 Chủ đề   Người gửi   Trả lời   Xem   Bài viết mới nhất 
Không có bài viết chưa xem mới nào trong chủ đề này. [SQL] Tìm giá trị trùng lặp trong SQL - How to find duplicate values in SQL

MySQL

0

164

29/09/2024 15:07

MySQL Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [SQL] Các loại JOIN trong SQL

nghiammo1992

0

746

11/02/2022 02:05

nghiammo1992 Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [SQL] 100 từ khóa SQL thường hay sử dụng và phố biến nhất

iPhone

0

178

04/10/2024 19:34

iPhone Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [PHP] How to check PHP send mail() function - Kiểm tra hàm send mail() php có hoạt động không?

nghiammo1992

0

1038

23/07/2015 00:39

nghiammo1992 Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [PHP] Chọn một tập tin ngẫu nhiên từ thư mục trong PHP - Select a random file from directory in PHP

HTML

0

328

28/06/2024 17:47

HTML Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. Online Compiler for C, C++, C#, Java, Python, PHP, JavaScript, SQL, CSS, HTML, Ruby, Go, Shell, Objective-C, Scala, Swift, TypeScript ...

Python

0

403

27/10/2023 19:17

Python Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [PHP] Hàm var_dump() trong PHP dùng để làm gì?

VOZ

0

329

19/10/2023 14:19

VOZ Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [PHP] Hàm trim() trong PHP dùng để làm gì?

Shopee

0

341

19/10/2023 20:17

Shopee Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. [PHP] Code tăng tốc độ load website - Tối ưu hóa seo

nghiammo1992

2

2253

14/12/2013 08:20

Yoonsiyoon Xem bài viết mới nhất vừa gửi

Không có bài viết chưa xem mới nào trong chủ đề này. Cần người rành về php và tạo wap trên host vào giúp

Gocgiaitri1234

0

1060

19/04/2014 11:39

Gocgiaitri1234 Xem bài viết mới nhất vừa gửi

 


Ai đang trực tuyến?

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến4 khách


Bạn không thể tạo chủ đề mới trong chuyên mục này.
Bạn không thể trả lời bài viết trong chuyên mục này.
Bạn không thể sửa những bài viết của mình trong chuyên mục này.
Bạn không thể xoá những bài viết của mình trong chuyên mục này.

Tìm kiếm với từ khoá:
Chuyển đến:  
Đã tích hợp phpBB® Forum Software © phpBB Group
Vietnamese language pack for phpBB 3.0.x download and support.
CHIASE123.COM - Diễn đàn chia sẻ kiến thức