An explanation of how to prevent SQL injection in PHP
Preventing SQL injection is the best program to write in our daily PHP development website, because it can protect the website we develop. I believe that many junior PHP programmers have not written to prevent SQL injection. Some of them may not be accustomed to it, so today we will talk about how to use PHP to prevent SQL injection.
Cause
On the one hand, I have no awareness of this. Some data have not been strictly verified, and then directly spliced into SQL to query. Leading to vulnerabilities, such as:
$id = $_GET['id']; $sql = "SELECT name FROM users WHERE id = $id";
Because there is no data type verification for $_GET['id'], the injector can submit any type of data, such as "and 1= 1 or " and other unsafe data. It is safer if you write it in the following way.
$id = intval($_GET['id']); $sql = "SELECT name FROM users WHERE id = $id";
Convert id to int type to remove unsafe things.
Verify data
The first step to prevent injection is to verify the data, which can be strictly verified according to the corresponding type. For example, the int type can be converted directly through intval:
$id =intval( $_GET['id']);
characters are more complicated to process. First, format the output through the sprintf function to ensure that it is a string. Then use some security functions to remove some illegal characters, such as:
$str = addslashes(sprintf("%s",$str)); //也可以用 mysqli_real_escape_string 函数替代addslashes
This will be safer in the future. Of course, you can further determine the length of the string to prevent "buffer overflow attack" such as:
$str = addslashes(sprintf("%s",$str)); $str = substr($str,0,40); //最大长度为40
Parameterized binding
Parameterized binding is another barrier to prevent SQL injection. Both php MySQLi and PDO provide such functionality. For example, MySQLi can query like this:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world'); $stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)"); $code = 'DEU'; $language = 'Bavarian'; $official = "F"; $percent = 11.2; $stmt->bind_param('sssd', $code, $language, $official, $percent);
PDO is even more convenient, for example:
/* Execute a prepared statement by passing an array of values */ $sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':calories' => 150, ':colour' => 'red')); $red = $sth->fetchAll(); $sth->execute(array(':calories' => 175, ':colour' => 'yellow')); $yellow = $sth->fetchAll();
Most of us use the PHP framework for programming, so it is best not to spell SQL yourself and follow the framework. Parameter bindingQuery. When encountering more complex SQL statements, you must pay attention to strict judgment when spelling them yourself. You can also write a prepared one yourself without using PDO or MySQLi, such as the wordprss db query statement. It can be seen that it has also undergone strict type verification.
function prepare( $query, $args ) { if ( is_null( $query ) ) return; // This is not meant to be foolproof -- but it will catch obviously incorrect usage. if ( strpos( $query, '%' ) === false ) { _doing_it_wrong( 'wpdb::prepare' , sprintf ( ( 'The query argument of %s must have a placeholder.' ), 'wpdb::prepare()' ), '3.9' ); } $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up if ( isset( $args[ 0] ) && is_array( $args[0]) ) $args = $args [0]; $query = str_replace( "'%s'", '%s' , $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s' , $query ); // doublequote unquoting $query = preg_replace( '|(?<!%)%f|' , '%F' , $query ); // Force floats to be locale unaware $query = preg_replace( '|(?<!%)%s|', "'%s'" , $query ); // quote the strings, avoiding escaped strings like %%s array_walk( $args, array( $this, 'escape_by_ref' ) ); return @ vsprintf( $query, $args ); }
Summary
Security is very important. It can also be seen from a person’s basic skills, the project is full of loopholes, the scalability and scalability It doesn't matter how maintainable it is. Pay more attention at ordinary times, establish safety awareness, and develop a habit. Of course, some basic safety will not take up the time of coding. If you develop this habit, even if the project is urgent and the time is short, you can still do it with high quality. Don't wait until all the things you are responsible for in the future, including the database, are taken away and losses are caused before you take it seriously. mutual encouragement!
Related articles:
Detailed explanation of the method of preventing sql injection in php
Introduction to the function of php to prevent sql injection
The above is the detailed content of An explanation of how to prevent SQL injection in PHP. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
