search
HomeBackend DevelopmentPHP TutorialDetailed explanation of effectively preventing SQL injection vulnerabilities_PHP tutorial

Detailed explanation of effectively preventing SQL injection vulnerabilities_PHP tutorial

Jul 13, 2016 pm 05:09 PM
sqlDodynamicIncludeparameterrightefficientinjectionloopholesofdetailedstatementillustrateprevent

1. If the dynamically constructed sql statement contains parameters, please do the following operations on the parameters
a. Replace '(single quote) with ''(two single quote)
b. Replace -- (comment character) with
c. When adding parameters to a statement, be sure to add quotation marks before and after, such as: 'select * from table where id='''+@id+'''' such addition
2. If the dynamically constructed SQL statement contains table parameters, do not add [] (square brackets) to the table, such as: 'select * from ['+@tab+']'

3. Avoid dynamic sql statements: especially the fields that obtain query, modification, and deletion conditions from the IE client are most likely to be injected. For example, the above-mentioned personid is obtained from the client. For the convenience of development, the fields obtained from the client are directly persongid is used as a condition of the sql statement, but there is no necessary check for personid, so it is best to use the preparedstatement class when executing sql statements during development.

4. Verify data: Using web page special effects on the client IE to verify the legality of user input data is actually not very effective. After obtaining the client data, the data must be strictly verified. Developers should not assume that the user only Legal data will be entered. Make sure to check for semicolons, quotes, brackets, sql keywords, etc. in your application. Regular expressions can be used to perform complex pattern matching, and good results can be achieved by using them.


The ××× website address book viewing program needs to pass a personid, and the personid can be passed through the url parameter. Since the address book viewing program obtains the personid directly without any data legality verification, and the personid is a string variable, the code to obtain the personid is as follows:

if (getparameter(req,"personid")!=null){

personid=getparameter(req,"personid").trim();

}else{

personid="";

}

The dynamic sql statements combined in this program are as follows:

personsql="select * from table name where userid="+long.tostring(userid)+" and addrcontactid="+personid;

Since the program does not check whether the personid is an integer, the attacker can assign a value to the personid and continue to run the subsequent program logic. If the attacker enters the following URL:

http://www.----------------------?personid=6414 or 2=2

The sql statement composed of

is as follows:

select * from table name where userid=1433620 and addrcontactid=6414 or 2=2

Prevention methods

SQL injection vulnerabilities can be said to be "a dike of thousands of miles, but collapses in an ant nest". This kind of vulnerability is extremely common on the Internet. It is usually caused by programmers not understanding injection, or program filtering is not strict, or a certain parameter is forgotten to check. . Here, I will give you a function that replaces the request function in the ASP tutorial. It can say no to all SQL injections. The function is as follows:

function saferequest(paraname,paratype)
'--- Incoming parameters ---
'paraname: parameter name - character type
'paratype: parameter type - numeric type (1 indicates that the above parameters are numbers, 0 indicates that the above parameters are characters)

dim paravalue
​paravalue=request(paraname)
if paratype=1 then
​if not isnumeric(paravalue) then
  response.write "Parameter" & paraname & "Must be numeric type!"
  response.end
end if
else
paravalue=replace(paravalue,"'","''")
end if
saferequest=paravalue
end function

Application of the above function

For int type parameters, such as the id of an article, you can first determine whether it is an integer.

id =trim(request("id"))
if id"" then
if not isnumeric(id) then
Response.write"Please provide numeric parameters"
Response.end
end if
id = clng(id)
else
response.write"Please enter parameter id"
response.end
end if

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/629725.htmlTechArticle1. If the dynamically constructed sql statement contains parameters, please do the following operations on the parameters a. Replace '( Replace single quote) with '' (two single quotes) b. Replace -- (comment character) c. When adding parameters to the statement...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

Simple Guide: Sending Email with PHP ScriptSimple Guide: Sending Email with PHP ScriptMay 12, 2025 am 12:02 AM

PHPisusedforsendingemailsduetoitsbuilt-inmail()functionandsupportivelibrarieslikePHPMailerandSwiftMailer.1)Usethemail()functionforbasicemails,butithaslimitations.2)EmployPHPMailerforadvancedfeatureslikeHTMLemailsandattachments.3)Improvedeliverability

PHP Performance: Identifying and Fixing BottlenecksPHP Performance: Identifying and Fixing BottlenecksMay 11, 2025 am 12:13 AM

PHP performance bottlenecks can be solved through the following steps: 1) Use Xdebug or Blackfire for performance analysis to find out the problem; 2) Optimize database queries and use caches, such as APCu; 3) Use efficient functions such as array_filter to optimize array operations; 4) Configure OPcache for bytecode cache; 5) Optimize the front-end, such as reducing HTTP requests and optimizing pictures; 6) Continuously monitor and optimize performance. Through these methods, the performance of PHP applications can be significantly improved.

Dependency Injection for PHP: a quick summaryDependency Injection for PHP: a quick summaryMay 11, 2025 am 12:09 AM

DependencyInjection(DI)inPHPisadesignpatternthatmanagesandreducesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itallowspassingdependencieslikedatabaseconnectionstoclassesasparameters,facilitatingeasiertestingandscalability.

Increase PHP Performance: Caching Strategies & TechniquesIncrease PHP Performance: Caching Strategies & TechniquesMay 11, 2025 am 12:08 AM

CachingimprovesPHPperformancebystoringresultsofcomputationsorqueriesforquickretrieval,reducingserverloadandenhancingresponsetimes.Effectivestrategiesinclude:1)Opcodecaching,whichstorescompiledPHPscriptsinmemorytoskipcompilation;2)DatacachingusingMemc

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.