???????????????sql?????????sql????????????????????γ???????????????Σ????????????????Ч????
????sql???????
??????????????????????????????ν??????????????????????????????? addslashes ????????? get_magic_quotes_gpc ?????е????????????????壬??д?????????????????????????????????????????????????????????????????????????????????????????????????ν?????????в????????????????????????????????н??н???????????????????????SQL?????????????????β????????????????д??е????????????????????У??????????????????????????У??γ?????????
????????????????????????????????SQL??????????????ú??????????????

??????SQL??????????????????????£? dedecms????????????????????
????sql???????????
?????????mysql??????????????????????????????漲???????????????????????????в??????????κε?????
???????????????????????顣
?????????μ??????:
????CREATE TABLE `users` (
????`user_id` int(5) NOT NULL AUTO_INCREMENT??
????`username` varchar(30) DEFAULT NULL??
????`password` varchar(32) DEFAULT NULL??
????`email` varchar(30) DEFAULT NULL??
????`ip` varchar(20) DEFAULT NULL??
????PRIMARY KEY (`user_id`)
????) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
??????????????е? username ???????30???????????????μ????????????
????insert into users(username??password??email??ip) values('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'??'1'??'2'??'127.0.0.1');
???????е?username????????30?????a????????b??????????

???????????????? b ????????
?????????????????sql?????????
???????????????????sql?????????????????2????????????
??????my.cnf?д???????????? sql-mode ???????????????
????sql-mode="NO_AUTO_CREATE_USER??NO_ENGINE_SUBSTITUTION"
????????????????У?????????????????????????????????????е?????????
????????? sql-mode ?м??? STRICT_TRANS_TABLES ?????:
????sql-mode="NO_AUTO_CREATE_USER??NO_ENGINE_SUBSTITUTION??STRICT_TRANS_TABLES"
?????? STRICT_TRANS_TABLES ??????£??????????????У?飬????????????????error????
???????????????
????????ο???????? mysql ????? Strict Mode???
?????????????? select @@sql_mode ????????????????
????????????£?????????ν??г???

???????????????????£????????????????????mysql????н?????????????????2?????
??????????
????sql????????????????β???????????????????????壬??????′???????????????????????????????sql???????????????????????????????Ч???????y?????????????????????????????????????????????
if (!get_magic_quotes_gpc()){
foreach($_POST as $key => $value){
$_POST[$key] = addslashes($value);
}
foreach($_GET as $key => $value){
$_GET[$key] = addslashes($value);
}
}
if($_GET['action'] == 'login'){
if($_SESSION['login']){
header('Location: index.php');
die();
}
if($_POST['username'] && $_POST['password']){
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
$sql = "SELECT * FROM users WHERE username = '$username' and password = '$password'";
$query = mysql_query($sql);
if(mysql_num_rows($query) == 1){
$row = mysql_fetch_array($query);
$_SESSION['login'] = 1;
$_SESSION['username'] = $row['username'];
$_SESSION['email'] = $row['email'];
header('Location: index.php');
die();
}else{
ShowLoginForm();
die('<br>login error');
}
}
ShowLoginForm();
die();
} else if($_GET['action'] == 'register'){
if($_POST['username'] && $_POST['password'] && $_POST['email']){
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$ip = getenv('REMOTE_ADDR');
$sql = "SELECT * FROM users WHERE username = '$username'";
$query = mysql_query($sql);
if(mysql_num_rows($query) > 0){
ShowRegisterForm();
die('<br>user exists!');
}
$sql = "INSERT INTO users(username?? password?? email?? ip) VALUES ('$username'?? '$password'?? '$email'?? '$ip')";
$query = mysql_query($sql);
if(!$query){
die('db error');
}else{
$uid = mysql_insert_id();
$sql = "SELECT * FROM users WHERE user_id = $uid";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
$_SESSION['login'] = 1;
$_SESSION['username'] = $row['username'];
$_SESSION['email'] = $row['email'];
header('Location: index.php');
die('success');
}
}
ShowRegisterForm();
die();
}
if(!$_SESSION['login']){
header('Location: index.php?action=login');
die();
}
if($_GET['search']){
$username = $_SESSION['username'];
$title = mysql_real_escape_string($_GET['search']);
$sql = "select * from posts where username='$username' and title like '$title'";
var_dump($sql);
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo "title: ".$row['title'];
echo '<br>';
echo "content: ".$row['content'];
echo '<br>';
echo '<br>';
}
die();
}
????????????????????????????У?
????$username = mysql_real_escape_string($_POST['username']);
????$sql = "INSERT INTO users(username?? password?? email?? ip) VALUES ('$username'?? '$password'?? '$email'?? '$ip')";
????$query = mysql_query($sql);
???????????????????????????? mysql_real_escape_string ?????????????崦???
??????????????
????$sql = "SELECT * FROM users WHERE user_id = $uid";
????$query = mysql_query($sql);
????$row = mysql_fetch_array($query);
????$_SESSION['login'] = 1;
????$_SESSION['username'] = $row['username'];
???????????????????????SESSION?У??????????????????????
????????????У?
????$username = $_SESSION['username'];
????$title = mysql_real_escape_string($_GET['search']);
????$sql = "select * from posts where username='$username' and title like '$title'";
???????е? $username = $_SESSION['username']; ??username??????session??????????
?????????????????????н???????????壬????????? addslashes ????????壬??????????? mysql_real_escape_string ????????壬??????????????? ??
????????????μ???????????????

??????????? ' ???????????????? \' ?????????????4????????mysql?п???
????mysql> select length('\'');
????+----------------+
????| length('\'') |
????+----------------+
????|              2 |
????+----------------+
????1 row in set
???????????mysql??? \' ???????2????????? ' ???????????????????????? ' (??б??+??????)???????1????????????????????????£?

???????????????? ??????????
????????????????????payload???????search???????????????????????????д???
????localhost/sql4/index.php?search=union select 1??2??3??@@version%23
????????????????

???????sql?????????????? ?????????? ' ????????????union?????????????
????????лp????????????????????????