10/10/2018, 11:20

Bảo mật trong Codeigniter ???

Trong php 5 đã fix lỗi : truyền biến có dấu ' sẽ thành '.

Nhưng nếu hiện thị trong controller của Codeigniter
echo '<pre>';
print_r($_POST);
echo '</pre>';

thì sẽ bị mất dấu ' chỉ còn dấu ' (dù có XSS Filtering )

Xin mọi người giải thích cho mình biết sao Codeigniter lại bỏ đi vậy ?
Và xin cách khắc phục.
bluewayvn viết 13:29 ngày 10/10/2018
Cái này thực ra là trong php có 1 option gọi là magic_quote_gpc, nếu enable lên thì khi truyền dấu ' nó sẽ tự động chuyển thành \'. Việc này thực ra lại là một chuyện không tốt , bởi vậy phần lớn các framework đều tự động check xem magic_quote_gpc có enable hay không, nếu có thì thực hiện thao tác chuyển ngược từ \' sang '.
Nếu bạn muốn thêm cái \ ở mỗi cái ' thì sử dụng hàm này: addslashs (php). Nếu muốn sử dụng trong câu mysql thì có thể dùng hàm mysql_escape_string hoặc mysql_real_escape_string.
Bạn nên google để biết thêm chi tiết.
xuantuan211088 viết 13:31 ngày 10/10/2018
cám ơn bluewayvn. Các hàm bạn đưa ra mình đã nắm được rồi.

Nhưng mình nghĩ đây là cách chống sql injection chứ. Sao framework lại bỏ đi nhỉ. Có gì không tốt ở điểm này vậy ?
bluewayvn viết 13:29 ngày 10/10/2018
Chỉ có coder newbie mới dùng cách này để chống sql injection thôi. Cách này rõ ràng không tốt bởi vì input mình xử lý không còn nguyên vẹn như user nhập vào nữa, và điều này sẽ ảnh hưởng đến lúc chạy script: script viết trên môi trường magic_quote_gpc enable không chạy tốt trên môi trường nó bị disable (là lỗi sql ịnection đấy). Cho nên coder pro thường chọn cách tự động tắt cái này đi, rồi khi nào đụng đến database thì họ lại gọi mấy hàm addslashs lên để chắc ăn.
Nói cho đơn giản là: cái magic_quote_gpc enable sẽ làm script viết ra đễ bị sql injection hơn bình thường )
nanalove viết 13:34 ngày 10/10/2018
tuyệt vời, mình đang thắc mắc cái này, thank hai anh
xuantuan211088 viết 13:28 ngày 10/10/2018
Cảm ơn bluewayvn nhiều lắm.
Bài liên quan
0