Здравствуйте. Имеется вот такой PHP файл в корне сайта: Как видно из кода создается аккаунт через запрос - $premium_group=6; $q="INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '$premium_group', '', '', '', '', '$_IP', '$hash')"; Можно как-то хакнуть и создать аккаунт и указать premium_group=1? PHP: <?$method=$_GET['method'];$secretKey="58118db78620cb1b289a382c6f81c69b";$line=$method;foreach ($_GET['params'] as $k=>$v){ if ($k!="signature"){ $line.='{up}'.$v; }}$line.='{up}'.$secretKey;$sig=hash("sha256",$line);if ($sig!=$_GET['params']['signature']){$ret['error']=array('message'=>"bad signature");die(json_encode($ret));}function set_cookie($name, $value, $expires) { global $config; if( $expires ) { $expires = time() + ($expires * 86400); } else { $expires = FALSE; }setcookie( $name, $value, $expires, "/", DOMAIN, TRUE, TRUE );}$account=$_GET['params']['account'];//file_put_contents('data.txt',print_r($_GET,true)."|".print_r($_POST,true)."\r\n---------",FILE_APPEND);if ($_GET['method']=='pay'||$_GET['method']=='check'){define ( 'DATALIFEENGINE', true );define ( 'ROOT_DIR', dirname ( __FILE__ ) );define ( 'ENGINE_DIR', $_SERVER['DOCUMENT_ROOT'] . '/engine' );require_once (ENGINE_DIR . '/classes/plugins.class.php');require_once (ENGINE_DIR.'/data/dbconfig.php');if ($_GET['method']=='check'){ $q="SELECT * FROM " . USERPREFIX . "_users WHERE email='".$account."' AND user_group = '6'"; $res=$db->query( $q ); if ($res->num_rows==0){ $ans="Услуга доступна для аккаунта $account"; $ret['result']=array('message'=>$ans); die(json_encode($ret)); }else{ $res=$res->fetch_assoc(); $ret['error']=array('message'=>"Услуга уже куплена для аккаунта ".$account.""); die(json_encode($ret)); }}$email=$account;if(!filter_var($account, FILTER_VALIDATE_EMAIL)){ $ret['error']=array('message'=>"Не верное имя аккаунта ".$account.""); die(json_encode($ret));}if ($_GET['method']!='pay'){ $ret['error']=array('message'=>"Не верное имя метода ".$_GET['method'].""); die(json_encode($ret));}session_start();$name = uniqid();$count_letter_pwd = 8;$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";$password =substr(str_shuffle($chars), 0, $count_letter_pwd);//"12345678";$regpassword = $db->safesql( password_hash($password, PASSWORD_DEFAULT) ); if(function_exists('openssl_random_pseudo_bytes')) { $stronghash = md5(openssl_random_pseudo_bytes(15)); } else $stronghash = md5(uniqid( mt_rand(), TRUE )); $salt = sha1( str_shuffle("abcdefghjkmnpqrstuvwxyz0123456789") . $stronghash ); $hash = ''; for($i = 0; $i < 9; $i ++) { $hash .= $salt[mt_rand( 0, 39 )]; } $hash = md5( $hash ); $premium_group=6; $q="INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '$premium_group', '', '', '', '', '$_IP', '$hash')"; $db->query( $q ); $id = $db->insert_id(); set_cookie( "dle_user_id", $id, 365 ); set_cookie( "dle_password", md5($regpassword), 365 ); if( $config['log_hash'] ) { set_cookie( "dle_hash", $hash, 365 ); } $_SESSION['dle_user_id'] = $id; $_SESSION['dle_password'] = md5($regpassword);// $db->query("UPDATE " . USERPREFIX . "_users SET user_group = '6' WHERE user_id='".$res['user_id']."'");require_once 'vendor/autoload.php';$mail_theme = "Регистрация на сайте ";$mail_body= "{date} - дата регистрации.<br>\n{time} - время регистрации.<br>\n{login} - ваш логин.<br>\n{email} - ваш email.<br>\n{password} - ваш пароль.";$mail_body= 'Тут текст'; $mail_body = str_replace( [ "{login}", "{email}", "{password}", ], [ $name, $email, $password ], $mail_body );// include_once (DLEPlugins::Check(ENGINE_DIR . '/classes/mail.class.php'));// $mail = new dle_mail( $config, true ); $mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->CharSet = 'UTF-8'; /**/ $mail->setFrom( ' noreply@', '' ); $mail->addAddress($email); $mail->Subject = $mail_theme; $mail->Body = $mail_body; $mail->isHTML( true ); $mail->send(); $ans="Услуга оплачена для аккаунта $account"; $ret['result']=array('message'=>$ans); die(json_encode($ret));}$ret['error']=array('message'=>"unknown error on site");die(json_encode($ret)); Помогите, как можно что-то сделать? За помощь помогу в ответ оплатой.
скрипт подвержен иньекции кода SQL Code: $account=$_GET['params']['account']; $q="SELECT * FROM " . USERPREFIX . "_users WHERE email='".$account."' AND user_group = '6'"; фильтрации не вижу
Можете подсказать, как можно сделать запрос, чтобы передать параметры? За оплату. Дополнительно, если есть возможность, как поставить фильтрацию.
Использовать плейсхолдеры. https://www.php.net/manual/ru/pdo.prepare.php P.S. Скрипт написал очень плохо и долго быть много notice
Можете для этого скрипта помочь составить запрос с плейсхолдером? Я просто не шарю в этом) За оплату сделайте?