In web development, user input is the most common and most easily attacked entry. To improve the security of user input processing, PHP provides many practical functions, among which filter_input() and crypt() are two very important security tools. This article will introduce how to use these two functions in combination to effectively prevent common attack methods such as XSS (cross-site scripting attack) and password leakage.
filter_input() is a built-in function in PHP that gets and filters external inputs, such as POST or GET data in a form. It can effectively preprocess the data submitted by users to prevent malicious data from entering the application logic layer. For example:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
The purpose of this line of code is to obtain username parameters from the POST request and remove HTML tags and special characters from it to prevent cross-site scripting attacks.
Secure storage of user passwords is an issue that developers must take seriously. The crypt() function provided by PHP supports a variety of encryption algorithms, and the recommended use of the Blowfish algorithm (identified by the salt value starting with $2y$ ). The encrypted password is difficult to crack, and even if the database is leaked, the attacker cannot easily restore the original password.
Example usage:
$salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(22))), 0, 22);
$hashedPassword = crypt($password, $salt);
In the above code, random_bytes() is used to generate a high-intensity random string to ensure that the generated ciphertext is different even if the password of each user is the same.
Using filter_input() and crypt() can establish a secure data processing process:
First filter the user input to prevent XSS and code injection;
Then use crypt() to encrypt and store the password to prevent the plain text password from being leaked;
Finally, only the encrypted password and username are stored in the database.
This processing process can effectively prevent a series of common web attacks and provide a solid security foundation for the website.
When logging in, you only need to use crypt() to compare the password submitted by the user with the encrypted password in the database:
$inputPassword = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$storedHash = 'Password hash value taken from the database';
if (crypt($inputPassword, $storedHash) === $storedHash) {
echo "Password verification passed";
} else {
echo "Error password";
}
This verification method is safe and standard, and does not require the password to be restored to plaintext.
By combining filter_input() and crypt() , the security of the website's user input processing can be significantly improved. filter_input() is responsible for filtering to prevent malicious input; crypt() is responsible for encryption to prevent password leakage. These two functions are indispensable when building a secure login system and a user management system. Developers should develop good habits of using these functions to protect users and the system's safety.