ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как методами Php послать запрос Sql на поиск в базе?
  #1  
Старый 25.09.2006, 03:15
PEPSICOLA
Познавший АНТИЧАТ
Регистрация: 14.10.2004
Сообщений: 1,162
Провел на форуме:
5619724

Репутация: 2944


Question Как методами Php послать запрос Sql на поиск в базе?

Авторизация в портале\форуме.

Имеется база данных пользователей. В таблице users есть столбик login и password.

С регистрацией всё ясно, пользователи в базе.

Авторизация...


Допустим получаем методом POST:

$login = "admin";
$password = "123";

К MySQL базе подключились, к таблице users тоже.

Как должен выглядить sql запрос на поиск в таблице login'a и правильного к нему password'a?

$query = "SELECT * FROM users"; (Вот тут уже не знаю, в самоучителе не написано )

NEED HELP!

______________________________________


И появилась проблема в phpmyadmin

utf8 vs cp1251

В готовой таблице есть login = admin, password - 123.

Я в phpmyadmin иду по ссылке "искать" (там где: Или Выполнить "запрос по примеру" (символ подстановки: "%")), значит пишу в строчке для столбика Login: admin, в строчке для столбика password: 123, меняю оператор "LIKE" на "="... а результат:

MySQL вернула пустой результат (т.е. ноль рядов). (Запрос занял 0.0004 сек)


Цитата:
SQL-запрос:
SELECT *
FROM `users`
WHERE `login` = CONVERT( _utf8 'admin'
USING cp1251 )
COLLATE cp1251_general_ci
AND `password` = CONVERT( _utf8 '123'
USING cp1251 )
COLLATE cp1251_general_ci
LIMIT 0 , 30
Думаю что ошибка в кодировке... Что делать не знаю.

SOS! Please!
 
Ответить с цитированием

  #2  
Старый 25.09.2006, 03:51
hidden
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме:
5887054

Репутация: 1292


По умолчанию

Не знаю зачем заставлять SQL кодировать в utf8, когда проще заранние средствами php закодировать,
а вообще, латинский алфовит и цифры в utf8 так и остаются сами собой, так что дело не в этом.
Вообше не проверял, но вроде так правильно
'SELECT * FROM login WHERE login="'.utf8_encode(preg_replace('/"/','`',$login)).'"' AND password="'.utf8_encode(preg_replace('/"/','`',$pass)).'"'
 
Ответить с цитированием

  #3  
Старый 25.09.2006, 03:53
VampiRUS
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме:
1106266

Репутация: 366
Отправить сообщение для VampiRUS с помощью Yahoo
По умолчанию

можешь так попробывать:
Код:
<?$sql="select password from users where login='$login'";
        $result=mysql_query($sql);
        $row=mysql_fetch_row($result);
        $num_rows=mysql_num_rows($result);
        if (($num_rows==1) && (!strcasecmp(md5($password),$row[0]))) {
//логин и пароль верные, если хеширования нету то&& (!strcasecmp(md5($password),$row[0])) убери
?>
 
Ответить с цитированием

  #4  
Старый 25.09.2006, 08:51
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

Какие все Эксперты собрались, кто-то кавычки регулярными выражениями вырезает, зачем-то заменяя их на другие символы, что конечно неприемлимо для нормального ресурса, а кто-то, даже не смотря на тематику сего форума, даже и не почесался об этом...
Чтобы все было корректно, стоит отключить magic_quotes_gpc и при SELECTе можно пользовать mysql_real_escape_string и еще вырезать str_replaceом пару символов, когда уточняющая информация в LIKE
 
Ответить с цитированием

  #5  
Старый 25.09.2006, 09:41
VampiRUS
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме:
1106266

Репутация: 366
Отправить сообщение для VampiRUS с помощью Yahoo
По умолчанию

Цитата:
а кто-то, даже не смотря на тематику сего форума, даже и не почесался об этом...
Небудем показывать пальцем)).Человеку нужно извлечь, значит извлекаем и ничего лишнего, о безопастности он сам должен думать, без подсказок.
 
Ответить с цитированием

  #6  
Старый 25.09.2006, 10:13
Егорыч+++
Administrator
Регистрация: 27.05.2002
Сообщений: 1,241
Провел на форуме:
20377164

Репутация: 0


По умолчанию

Цитата:
Сообщение от PEPSICOLA  
Авторизация в портале\форуме.

Имеется база данных пользователей. В таблице users есть столбик login и password.

С регистрацией всё ясно, пользователи в базе.

Авторизация...


Допустим получаем методом POST:

$login = "admin";
$password = "123";

К MySQL базе подключились, к таблице users тоже.

Как должен выглядить sql запрос на поиск в таблице login'a и правильного к нему password'a?

$query = "SELECT * FROM users"; (Вот тут уже не знаю, в самоучителе не написано )

NEED HELP!

______________________________________


И появилась проблема в phpmyadmin

utf8 vs cp1251

В готовой таблице есть login = admin, password - 123.

Я в phpmyadmin иду по ссылке "искать" (там где: Или Выполнить "запрос по примеру" (символ подстановки: "%")), значит пишу в строчке для столбика Login: admin, в строчке для столбика password: 123, меняю оператор "LIKE" на "="... а результат:

MySQL вернула пустой результат (т.е. ноль рядов). (Запрос занял 0.0004 сек)




Думаю что ошибка в кодировке... Что делать не знаю.

SOS! Please!

Причем тут кодировка вообще. У тебя весь текст вообще латинско-цифровой. Убери нафиг все кодировки из селекта.
 
Ответить с цитированием

  #7  
Старый 25.09.2006, 12:11
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме:
941818

Репутация: 569


По умолчанию

пепсик привет =))) рад что начинаешь вникать =)
Самоучители выбрось, http://dev.mysql.com/doc тебе в помощь. насчет твоего запроса, то оптимально будет примерно так:
PHP код:
<?
if(isset($_POST['login']) && isset($_POST['password'])){
  
$sql=mysql_query("SELECT passwd FROM users WHERE login='".addslashes($_POST['login'])."' LIMIT 1");
  if(
mysql_num_rows($sql)){
    if(
mysql_result($sql0,  'passwd')==md5($_POST['passwd'])){
      echo 
'вы авторизировались';
    }else{echo 
'пароль неверен';}
  }else{echo 
'логина не существует в базе';}
}
?>
Как видишь, язык sql запросов очень прост. Кодировка тут не при чем ) Забудь о ней =) В запросе я сверяю только логин потому что оптимальнее искать поле по одному составляющему, чем по двум. Проверка пароля php намного быстрее, чем mysql будет искать все поля с таким пассом, после того как найдет все логины. И еще, логины при такой схеме должны быть уникальным полем. Поставь в phpmyadmin этому полю UNIQUE индекс. И вообще индексируй все поля, по которым будешь проводить поиск в базе
 
Ответить с цитированием

  #8  
Старый 25.09.2006, 17:28
Zadoxlik
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме:
3369632

Репутация: 749


По умолчанию

Цитата:
Сообщение от VampiRUS  
Небудем показывать пальцем)).Человеку нужно извлечь, значит извлекаем и ничего лишнего, о безопастности он сам должен думать, без подсказок.
В данном случае сделать запрос безопасным является необходимой компонентой написания корректно работающего запроса
 
Ответить с цитированием

  #9  
Старый 25.09.2006, 18:11
Егорыч+++
Administrator
Регистрация: 27.05.2002
Сообщений: 1,241
Провел на форуме:
20377164

Репутация: 0


По умолчанию

Цитата:
Сообщение от Trinux  
Как видишь, язык sql запросов очень прост. Кодировка тут не при чем ) Забудь о ней =) В запросе я сверяю только логин потому что оптимальнее искать поле по одному составляющему, чем по двум. Проверка пароля php намного быстрее, чем mysql будет искать все поля с таким пассом, после того как найдет все логины. И еще, логины при такой схеме должны быть уникальным полем. Поставь в phpmyadmin этому полю UNIQUE индекс. И вообще индексируй все поля, по которым будешь проводить поиск в базе
Индекс можно делать и для двух полей сразу. так что ничего страшного. Можно и сразу все проверить.
 
Ответить с цитированием

  #10  
Старый 26.09.2006, 13:01
Sw%00p
Banned
Регистрация: 13.04.2006
Сообщений: 65
Провел на форуме:
160575

Репутация: -1
По умолчанию

Цитата:
С регистрацией всё ясно, пользователи в базе.

Авторизация...


Допустим получаем методом POST:

$login = "admin";
$password = "123";

К MySQL базе подключились, к таблице users тоже.

Как должен выглядить sql запрос на поиск в таблице login'a и правильного к нему password'a?

$query = "SELECT * FROM users"; (Вот тут уже не знаю, в самоучителе не написано )

NEED HELP!
так предупреждаю не смеяться тут не говориться что надо найти речь идёт об авторизации и сверки с базой введённого пасса и пароля
я бы сделал бы так (пхп код писать не буду просто в псевдо коде)
даём запрос на даннуую таблицу пользователей и результат (массив значений) даём в цикл для обработки и обычной функцией побитного сравнения строк (strcmp или strcasecmp) сравниваем каждое значение из таблицы с введёнными значениями логина и пасса
помоему получиться
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мой ржачный разговор в аське с кем-то вроде как с античата, как я подумал Дрэгги Болталка 21 22.07.2007 12:33
SQL Injection для чайников, взлом ASP+MSSQL k00p3r Чужие Статьи 0 12.06.2005 12:42
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41
SQL инъекция в сервере MySQL k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ