Использование переменной get из URL для выполнения запроса MYSQL - PullRequest
0 голосов
/ 20 января 2011

Я использую переменную post и пытаюсь использовать переменную get из URL для входа в систему пользователя.

Вот процесс:

Пользователи получают свой собственный URL, т.е. kayden.domain.com

, и когда они создают свою учетную запись, у них есть имя пользователя и пароль

Когда они заходят на kayden.domain.com, они используют эти учетные данные.

Чтобы проверить, я проверяю переменные записи (имя пользователя и пароль) и пытаюсь использовать $ _GET ['user_group'] для проверки.

Скрипт работает, когда я просто использую переменные post, но когда дело доходит до GET, он не работает.Ниже приведен код:

PHP:

    $SUBDOMAIN = mysql_real_escape_string($_GET['user_group']);


      // Process the POST variables
         $username = $_SESSION["user_name"];
       //$password = $_POST["password"];


        // Set up the session variables
       $_SESSION["user_name"] = $username;


         $secret = $info['password'];

            //Checks if there is a login cookie

          if(isset($_COOKIE['ID_my_site']))


       //if there is, it logs you in and directes you to the members page

        { 
        $username = $_COOKIE['ID_my_site']; 

       $pass = $_COOKIE['Key_my_site'];

       $check = mysql_query("SELECT user_name, password FROM accounts WHERE user_name = '$username' and user_group='$user_group'")or die(mysql_error());

    while($info = mysql_fetch_array( $check )) 



      {

      if (@ $info['password'] != $pass) 
       {

          }

        else

       {

             header("Location: members.php");



       }

      }

     }


          //if the login form is submitted 

      if (isset($_POST['submit'])) { // if form has been submitted



          // makes sure they filled it in

          if(!$_POST['user_name'] | !$_POST['password']) {

            die('You did not fill in a required field.');

        }

          // checks it against the database



        if (!get_magic_quotes_gpc()) {

        $_POST['user_name'] = addslashes($_POST['user_name']);
       $_GET['user_group'] = addslashes($_GET['user_group']);

         }

        $check = mysql_query("SELECT user_name,password FROM accounts WHERE user_name = '".$_POST['user_name']."' and user_group='".$_GET['user_group']."'")or die(mysql_error());



          //Gives error if user dosen't exist

           $check2 = mysql_num_rows($check);

       if ($check2 == 0) {

           die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>');

      }

            while($info = mysql_fetch_array( $check ))  

         {

       $_POST['password'] = md5($_POST['password']);
        $_POST['password'] = $_POST['password'];



      //gives error if the password is wrong



        if (@ $_POST['password'] != $info['password']) {

        die('Incorrect password, please try again');


        }

          else 

        { 


            // if login is ok then we add a cookie 

          $_POST['user_name'] = stripslashes($_POST['user_name']); 

           $hour = time() + 3600; 

             setcookie(ID_my_site, $_POST['user_name'], $hour); 

             setcookie(Key_my_site, $_POST['password'], $hour);  



          //then redirect them to the members area 

         header("Location: members.php"); 

          } 

             } 

           } 

      else 

       {  



          // if they are not logged in 

     ?> 

       <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 

          <table border="0"> 

       <tr><td colspan=2><h1>Login</h1></td></tr> 

        <tr><td>username:</td><td> 

          <input type="text" name="user_name" maxlength="40"> 

          </td></tr> 

           <tr><td>Password:</td><td> 

           <input type="password" name="password" maxlength="50"> 

           </td></tr> 

           <tr><td colspan="2" align="right"> 

               <input type="submit" name="submit" value="Login"> 

           </td></tr> 

          </table> 

           </form> 


    <?php 

       } 



       ?> 

Ответы [ 3 ]

4 голосов
/ 20 января 2011

Двухуровневый ответ:

Часть 1

Вы можете использовать переменную PHP $ _REQUEST для получения деталей как из GET (строка запроса), так и из POST и COOKIE..

Например:

$ugData = $_REQUEST['user_group'];
$unData = $_REQUEST['user_name'];

Более подробную информацию об этом можно найти здесь:

http://php.net/manual/en/reserved.variables.request.php

Часть 2

Эта строка в вашем коде:

$check = mysql_query("SELECT user_name,password FROM accounts WHERE user_name = '".$_POST['user_name']."' and user_group='".$_GET['user_group']."'")or die(mysql_error()); 

Уязвима для внедрения SQL, злонамеренный пользователь может создать запрос, содержащий значение user_group или user_name, содержащее дополнительный SQLи ваш скрипт выполнит его без вопросов.

Вы должны всегда проверить любые внешние входные данные, поскольку вы не можете поверить, что он всегда будет содержать то, что вы ожидаете.

Более подробную информацию об этом можно найти:

http://php.net/manual/en/security.database.sql-injection.php http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php

Быстрый пример того, как с этим бороться:

$ugData = mysql_real_escape_string($_REQUEST['user_group']);
$unData = mysql_real_escape_string($_REQUEST['user_name']);

Это будетизбежал ввода $_REQUEST и, следовательно, остановил любого, кто создал вредоносный запрос.Однако это не подтверждает, что заданные user_group / user_name являются допустимыми значениями.

2 голосов
/ 20 января 2011

Вы используете метод POST для отправки формы.Поэтому вам нужно использовать его с $ _POST.

Если вы хотите использовать его как с GET, так и с POST, тогда используйте $_REQUEST['varName'].

0 голосов
/ 20 января 2011
if ( isset ( $_GET['user_group'] ) {
  $SUBDOMAIN = mysql_real_escape_string($_GET['user_group']);
}
if ( isset ( $_POST['user_group'] ) {
  $SUBDOMAIN = mysql_real_escape_string($_POST['user_group']);
}

с помощью $ _REQUEST можно получить форму var $ _COOKIE

...