Laravel Excel đặt đường viền
Vui lòng tham khảo tài liệu này, không có tùy chọn 7. Vâng, có thể có một số lỗi chính tả trong ví dụ về 8 đó Show Giải pháp liên quanPhp – Cách ngăn SQL injection trong PHPCách chính xác để tránh các cuộc tấn công SQL injection, bất kể bạn sử dụng cơ sở dữ liệu nào, là tách dữ liệu khỏi SQL, để dữ liệu vẫn là dữ liệu và sẽ không bao giờ được trình phân tích cú pháp SQL diễn giải thành các lệnh. Có thể tạo câu lệnh SQL với các phần dữ liệu được định dạng chính xác, nhưng nếu bạn không hiểu đầy đủ chi tiết, bạn nên luôn sử dụng câu lệnh đã chuẩn bị sẵn và truy vấn được tham số hóa. Đây là các câu lệnh SQL được máy chủ cơ sở dữ liệu gửi đến và phân tích cú pháp riêng biệt với bất kỳ tham số nào. Bằng cách này, kẻ tấn công không thể tiêm SQL độc hại Về cơ bản, bạn có hai lựa chọn để đạt được điều này
Nếu bạn đang kết nối với cơ sở dữ liệu không phải MySQL, thì có tùy chọn thứ hai dành riêng cho trình điều khiển mà bạn có thể tham khảo (ví dụ: 9 và 0 cho PostgreSQL). PDO là tùy chọn phổ quátThiết lập kết nối chính xácLưu ý rằng khi sử dụng PDO để truy cập cơ sở dữ liệu MySQL, các câu lệnh chuẩn bị thực không được sử dụng theo mặc định. Để khắc phục điều này, bạn phải tắt mô phỏng các câu lệnh đã chuẩn bị. Một ví dụ về việc tạo kết nối bằng PDO là
Trong ví dụ trên, chế độ lỗi không thực sự cần thiết, nhưng bạn nên thêm nó vào. Bằng cách này, tập lệnh sẽ không dừng lại với 1 khi có sự cố xảy ra. Và nó mang lại cho nhà phát triển cơ hội 2 bất kỳ (các) lỗi nào 3n thành 4Tuy nhiên, điều bắt buộc là dòng 5 đầu tiên, yêu cầu PDO tắt các câu lệnh đã chuẩn bị được mô phỏng và sử dụng các câu lệnh đã chuẩn bị thực sự. Điều này đảm bảo câu lệnh và các giá trị không được PHP phân tích cú pháp trước khi gửi nó đến máy chủ MySQL (khiến kẻ tấn công không có cơ hội tiêm SQL độc hại)Mặc dù bạn có thể đặt 6 trong các tùy chọn của hàm tạo, điều quan trọng cần lưu ý là các phiên bản PHP 'cũ' (trước 5. 3. 6) âm thầm bỏ qua tham số bộ ký tự trong DSNGiải trìnhCâu lệnh SQL bạn chuyển đến 7 được máy chủ cơ sở dữ liệu phân tích cú pháp và biên dịch. Bằng cách chỉ định các tham số (có thể là 8 hoặc tham số được đặt tên như 9 trong ví dụ trên), bạn cho công cụ cơ sở dữ liệu biết nơi bạn muốn lọc. Sau đó, khi bạn gọi 0, câu lệnh đã chuẩn bị được kết hợp với các giá trị tham số mà bạn chỉ địnhĐiều quan trọng ở đây là các giá trị tham số được kết hợp với câu lệnh đã biên dịch, không phải là chuỗi SQL. SQL injection hoạt động bằng cách lừa tập lệnh bao gồm các chuỗi độc hại khi nó tạo SQL để gửi đến cơ sở dữ liệu. Vì vậy, bằng cách gửi SQL thực riêng biệt với các tham số, bạn sẽ hạn chế rủi ro kết thúc bằng thứ mà bạn không có ý định Bất kỳ tham số nào bạn gửi khi sử dụng câu lệnh đã chuẩn bị sẽ chỉ được coi là chuỗi (mặc dù công cụ cơ sở dữ liệu có thể thực hiện một số tối ưu hóa để tất nhiên, tham số cũng có thể kết thúc dưới dạng số). Trong ví dụ trên, nếu biến 1 chứa 2, kết quả sẽ chỉ là tìm kiếm chuỗi 3 và bạn sẽ không nhận được một bảng trốngMột lợi ích khác của việc sử dụng các câu lệnh đã chuẩn bị là nếu bạn thực hiện cùng một câu lệnh nhiều lần trong cùng một phiên thì nó sẽ chỉ được phân tích cú pháp và biên dịch một lần, giúp bạn tăng tốc độ Ồ, và vì bạn đã hỏi về cách thực hiện cho phần chèn, đây là một ví dụ (sử dụng PDO) 7Câu lệnh đã chuẩn bị có thể được sử dụng cho các truy vấn động không?Mặc dù bạn vẫn có thể sử dụng các câu lệnh đã chuẩn bị cho các tham số truy vấn, nhưng bản thân cấu trúc của truy vấn động không thể được tham số hóa và một số tính năng truy vấn nhất định không thể được tham số hóa Đối với những trường hợp cụ thể này, điều tốt nhất cần làm là sử dụng bộ lọc danh sách trắng để hạn chế các giá trị có thể 8Php – Cách vệ sinh đầu vào của người dùng bằng PHPĐó là một quan niệm sai lầm phổ biến rằng đầu vào của người dùng có thể được lọc. PHP thậm chí còn có một "tính năng" (hiện không dùng nữa), được gọi là trích dẫn ma thuật, được xây dựng dựa trên ý tưởng này. Đó là vô nghĩa. Quên việc lọc (hoặc làm sạch, hoặc bất cứ điều gì mọi người gọi nó) Những gì bạn nên làm, để tránh các vấn đề, khá đơn giản. bất cứ khi nào bạn nhúng một đoạn dữ liệu trong một mã nước ngoài, bạn phải xử lý nó theo các quy tắc định dạng của mã đó. Nhưng bạn phải hiểu rằng những quy tắc như vậy có thể quá phức tạp để cố gắng làm theo tất cả chúng một cách thủ công. Ví dụ: trong SQL, các quy tắc cho chuỗi, số và mã định danh đều khác nhau. Để thuận tiện cho bạn, trong hầu hết các trường hợp, có một công cụ chuyên dụng cho việc nhúng như vậy. Ví dụ: khi bạn cần sử dụng một biến PHP trong truy vấn SQL, bạn phải sử dụng một câu lệnh đã chuẩn bị sẵn, câu lệnh này sẽ xử lý tất cả các định dạng/xử lý phù hợp Một ví dụ khác là HTML. Nếu bạn nhúng các chuỗi trong phần đánh dấu HTML, bạn phải thoát nó bằng 4. Điều này có nghĩa là mọi câu lệnh 5 hoặc 6 nên sử dụng 4Một ví dụ thứ ba có thể là các lệnh shell. Nếu bạn định nhúng các chuỗi (chẳng hạn như đối số) vào các lệnh bên ngoài và gọi chúng bằng 8, thì bạn phải sử dụng 9 và 0Ngoài ra, một ví dụ rất hấp dẫn là JSON. Các quy tắc rất nhiều và phức tạp đến mức bạn sẽ không bao giờ có thể làm theo tất cả chúng một cách thủ công. Đó là lý do tại sao bạn không bao giờ nên tạo chuỗi JSON theo cách thủ công mà hãy luôn sử dụng một hàm chuyên dụng, 1 sẽ định dạng chính xác mọi bit dữ liệuVân vân và vân vân Trường hợp duy nhất mà bạn cần chủ động lọc dữ liệu là nếu bạn đang chấp nhận thông tin đầu vào được định dạng sẵn. Ví dụ: nếu bạn cho phép người dùng đăng đánh dấu HTML mà bạn định hiển thị trên trang web. Tuy nhiên, bạn nên khôn ngoan để tránh điều này bằng mọi giá, vì cho dù bạn lọc nó tốt đến đâu, nó sẽ luôn là một lỗ hổng bảo mật tiềm ẩn. |