SQL injection (SQLi) is an injection attack that can execute malicious SQL statements. It gives attackers complete control over the database server behind a web application by inserting arbitrary SQL code into database queries.
An attacker can use SQL injection vulnerabilities to bypass application security measures; can bypass authentication and authorization of a web page or web application, and retrieve the contents of the entire SQL database ; SQL injection can also be used to add, modify and delete records in the database.
How to prevent sql injection in php?
1. When are you most vulnerable to SQL injection attacks?
When the application uses input content to construct dynamic SQL statements to access the database SQL injection attacks will occur
2. How to prevent SQL injection
a.Never trust user input and verify user input , you can use regular expressions or limit the length to convert single quotes and "_"
Deprecated:
//$user = htmlspecialchars(addslashes($user)); //$pwd = htmlspecialchars(addslashes($pwd)); //$yzm = htmlspecialchars(addslashes($yzm));
Should be used:
$user = htmlspecialchars(addslashes($user)); $pwd = htmlspecialchars(addslashes($pwd)); $yzm = htmlspecialchars(addslashes($yzm));
b, Never use dynamic assembly of SQL, you can use parameterized SQL or directly use stored procedures for data query and access
Not recommended:
// $sql = "select * from user where user='$user' and pwd ='$pwd'";
Should be used :
$sql = "select * from user where user=? and pwd =?";
c, Never use a database connection with administrator privileges, use a separate data connection with limited permissions for each application
$conn = @new mysqli('localhost','root','','myschool'); if($conn->connect_error){ die('连接数据库失败'); } $conn->set_charset('utf8');
d, Do not store confidential information directly, encrypt or HASH passwords and sensitive information
e, The detection method of QL injection is generally to use auxiliary software or website platform detection, software Generally, the SQL injection detection tool jsky is used. The website platform has Yisi. The website platform detection tool
3 and php mysqli extension preprocessing
are often used in mysqli operations. Involving its three main classes: MYSQLI class, MYSQL_STMT class, MYSQLI_RESULT class, preprocessing is mainly completed using the MYSQL_STMT class.
Preprocessing is an important means to prevent SQL injection and is of great significance to improving website security. The working principle of preprocessing statements:
(1) Preprocessing: Create a SQL statement template and send it to the database. The reserved values are marked with parameters?
Example: insert into myguests(firstname,lastname,email) values (?,?,?)
(2) Database analysis, compilation, query optimization on SQL statement template, and storage The result is not output
if ($stmt = $conn->prepare($sql)) { $stmt -> bind_param("ss",$user,$pwd); $stmt -> execute(); $stmt -> store_result(); //$res = $conn ->query($sql); if ($stmt->num_rows==0) { show_error('输入的用户名或密码错误','demo1.html'); } $stmt -> close(); } $conn ->close();
(3) Execution. Finally, the value bound by the application is passed to the parameter ("?" mark). The database executes the statement. The application can execute the statement multiple times if the value of the parameter is different.
For more PHP related knowledge, please visit PHP Chinese website!
The above is the detailed content of How to prevent sql injection in php?. For more information, please follow other related articles on the PHP Chinese website!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


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

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

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

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
