Khi chúng ta lập ra một form cho phép người dùng nhập vào các giá trị vào các thẻ input rồi sau đó những giá trị này sẽ được lưu vào database. Thì có thể những giá trị đó có chứa những đoạn mã gây nguy hiểm cho website của chúng ta như SQL injections hay là những đoạn mã nguy hiểm khác.
Để tránh việc này , mình xin chia sẻ cho các bạn một đoạn code bằng PHP giúp các bạn có thể dọn dẹp sạch sẽ những mã độc có thể gây hại cho website trước khi chúng được lưu vào database.
function cleanInput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // Loại bỏ javascript
'@<[\/\!]*?[^<>]*?>@si', // Loại bỏ HTML tags
'@<style[^>]*?>.*?</style>@siU', // Loại bỏ style tags
'@<![\s\S]*?--[ \t\n\r]*>@' // Loại bỏ multi-line comments
);
$output = preg_replace($search, '', $input);
return $output;
}
?>
<?php
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
Và đây là ví dụ sử dụng đơn giản cho đoạn code bên trên
<?php
$bad_string = "Hi! <script src='http://www.example.com/bad_script.js'></script> It's a good day!";
$good_string = sanitize($bad_string);
// $good_string returns "Hi! It\'s a good day!"
// Chúng ta cũng có thể sử dụng để làm sạch giá trị nhận từ POST/GET
$_POST = sanitize($_POST);
$_GET = sanitize($_GET);
?>
Mình mong là với chia sẻ này, các bạn có thể có thêm một kinh nghiệm trong việc lập trình nói chung và ngôn ngữ PHP nói riêng, và hy vọng là đoạn code bên trên sẽ giúp ích cho các bạn xây dựng những trang web hay blog chất lượng hơn.