За последние 24 часа нас посетили 16599 программистов и 1679 роботов. Сейчас ищут 934 программиста ...

Плейсхолдеры выдают ошибку

Тема в разделе "PHP для новичков", создана пользователем slavagoreev, 14 фев 2013.

  1. slavagoreev

    slavagoreev Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    34
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. session_start();
    3. define( '_JEXEC', 1 );
    4. if(isset($_POST['submit'])){
    5.     if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
    6.     if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    7.     if (empty($login) or empty($password)){
    8.         exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
    9.     }
    10.     $login = mysql_real_escape_string($login);
    11.     $password = mysql_real_escape_string($password);
    12.     $login = trim($login);
    13.     $password = trim($password);
    14.  
    15.     include ("connect.php");
    16.  
    17.     if (isset ($login, $password)){
    18.         $salt = array('salt_login', 'salt_password');
    19.         $table   = 'users';
    20.         $pattern = 'SELECT ?c FROM ?t LIMIT 1';
    21.         $data    = array($salt, $table);
    22.         $myrow = mysql_query($pattern, $data, $db);
    23.         $result = mysql_fetch_array ($myrow);
    24.         echo $result['salt_login'];
    25.     }
    26. }
    27. ?>
    У меня 3 вопроса:

    1 Вопрос.
    При попытке создания placeholder'а у меня вылазят ошибки (Подсвеченно красным)

    Warning: Wrong parameter count for mysql_query() in ...\www\admin\auth.php on line 22
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...\www\admin\auth.php on line 23

    В оригинале :
    Код (Text):
    1. $table   = 'table';
    2. $list    = array('раз', 'два', 'три');
    3. $pattern = 'INSERT INTO ?table VALUES (?list)';
    4. $data    = array($table, $list);
    5. $db->query($pattern, $data);
    Так как у меня база MYSQL => функция query(); не работает. Я заменил ее на mysql_query();. И в том и в другом случае выдает ошибку :
    Fatal error: Call to a member function query() on a non-object
    В чем ошибка, я понимаю параметры не правельно указанны, connect.php полностью функционален.

    2 Вопрос.
    На мой взгляд шифровка безопасна:

    $salt = сгенерированна случайна и у каждого пользователя своя.
    $password = md5(md5($salt).md5($pass));

    Могут ли ее взломать, в случае попадания в хакеру хэша пароля?
    3 Вопрос.
    Функция по сути нужна, если есть .htachess?
    define( '_JEXEC', 1 );
    И можете подсказать какие - нибудь средства защиты от взлома.
     
  2. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А нужно просто научится хотя-бы копировать текст ошибки/варнинга в гугл.
    mysql_query не тащит плейсхолдеры.
    переменная $db это не объект, а ресурс с информацией о подклучении к мускулу. Так что использование $db->query не работает.
    Плейсхолдеры-да, они спасают, чтобы их использовать нужна обертка -- PDO или DBSimple. Так как у вас джумла--заюзайте фреймворк JFactory, получите с помощью JFactory объект PDO и с ним уже работайте.
    На счет взломать-все можно, это лишь вопрос времени. Если есть хеш и известен метод хеширования то на кластере за месяц можно сбрутить пароль из хеша, но это никому не надо, зачем такие сложности всего из-за одного пароля, проще найти/купить приватный инъект в установленном компоненте и проэксплуатировать