PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (10): В начало « ... 2 3 4 5 [6] 7 8 9 10 »

> Найдено сообщений: 140
Ammy Отправлено: 10 Января, 2010 - 21:46:43 • Тема: Помогите найти ошибку. • Форум: SQL и Архитектура БД

Ответов: 16
Просмотров: 75

Это поможет определить истинную ошибку.
Ammy Отправлено: 10 Января, 2010 - 21:28:03 • Тема: Безопасность • Форум: Программирование на PHP

Ответов: 22
Просмотров: 2262
PHP:
скопировать код в буфер обмена
  1.  
  2. $login = (isset($_POST['login'])) ? (($_POST['login'] != '') ? trim($_POST['login']) : '') : '';
  3.  
  4. if(empty($login)) die();
  5.  


Не достойная альтернатива первому коду? Улыбка
(Добавление)
Цитата:

По второму коду, пароль действительно не выводится, а вот логин может и выводится.

Нет, логин нигде не выводится. Для них эдакая обработка - это решение проблем безопасности в целом, как видно.

Цитата:
Его можно в безопасном виде сразу в базу писать.


Есть ставит вопрос о визуальной важности, то некоторые решают эту проблему подобными не менее устрашающими функциями:

PHP:
скопировать код в буфер обмена
  1.  
  2. function validusername($username)
  3. {
  4.         if ($username == "")
  5.           return false;
  6.  
  7.         // The following characters are allowed in user names
  8.         $allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".
  9.                 "абвгдеёжзиклмнопрстуфхшщэюяьъАБВГДЕЁЖЗИКЛМНОПРСТУФХШЩЭЮЯЬЪ";
  10.  
  11.         for ($i = 0; $i < strlen($username); ++$i)
  12.           if (strpos($allowedchars, $username[$i]) === false)
  13.             return false;
  14.  
  15.         return true;
  16. }
  17.  
  18. // TBDev YSE
  19.  


Решают и регулярными выражениями, но это всем известно. Зависит от составления и непробиваемости.

Но почему никто не смотрит на ctype?
http://php.net/manual/en/book.ctype.php
Ammy Отправлено: 10 Января, 2010 - 21:15:23 • Тема: Безопасность • Форум: Программирование на PHP

Ответов: 22
Просмотров: 2262
Из кода системы регистрации Попова:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
  4. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
  5. if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} }
  6. if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
  7.  
  8. // Не много ли?
  9.  
  10.  



PHP:
скопировать код в буфер обмена
  1.  
  2. // Зачем это? Далее забавный комментарий автора:
  3.  
  4. //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
  5.  
  6. // Но зачем, если  переменные не выводятся в дальнейшем? Или в базе они научились работать, теги эти? Чего уж говорить о stripslashes..
  7.  
  8. $login = stripslashes($login);
  9. $login = htmlspecialchars($login);
  10.  
  11. $password = stripslashes($password);
  12. $password = htmlspecialchars($password);
  13.  
  14. $login = trim($login);
  15. $password = trim($password);
  16.  
  17. // и краткость, кстати, пострадала
  18.  
Ammy Отправлено: 10 Января, 2010 - 20:40:59 • Тема: Безопасность • Форум: Программирование на PHP

Ответов: 22
Просмотров: 2262
Цитата:
А почему краткость и безопасность с другой стороны от юзабельности и расширяемости?

Вкладывался следующий смысл:
1. Описывать какой-то отдельный момент кратко, безопасно, делая упор на производительность и безопасность, не торопиться переходить от одного к другому.

PHP:
скопировать код в буфер обмена
  1.  
  2. $extract = array_flip(array_intersect(array_keys($_POST), $options));
  3.  
  4. // написан Ch_chov в теме: http://forum.php.su/topic.php?forum=45&topic=114&v=l#1263029599
  5.  


2. Описывать момент быстро, и оставлять его в первоначальном виде, делая упор на реализацию дальнейших моментов.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $options = array('dcore', 'idle', 'jcache', 'hle', 'jrec', 'intpret', 'ttco', 'quant', 'dspt');
  4.             $extract = array();
  5.  
  6.             foreach ($options as $key => $value) {
  7.  
  8.                 if (isset($_POST[$value]) && $_POST[$value] == 'on') $extract[$value] = 'on';
  9.  
  10.             }
  11.  
  12.        
  13.  
  14.             echo serialize($extract); // подготовка для занесения в базу
  15.  
  16. // написан мною в той же теме
  17.  
  18.  


Цитата:
Что ты пол этим имеешь в виду? Я не очень представляю, как фильтры могут навредить целостности? Которые удаляют из строки потенциально нехорошие символы вместо того, чтоб их экранировать?

Функции, типа strip_tags, или вовсе самодельные, где применяется целый комплекс проверок и вырезаний (а главное то на них всей душой и телом полагаются, как на потенциальных защитников данных, мол, прикручу очередной стрип тагс и я на небе), что ни к чему хорошему не приводит. Вот, допустим, функция, анализирующая входящие данные, которая не пропускает пробелов:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function analyze($var) {
  4.  
  5.         $var = (preg_match('#[^a-zA-Z0-9_]#', $var)) ? '' : $var;
  6.         return $var;
  7.  
  8. }
  9.  
  10. // используется в SLAED CMS
  11.  


Под ущербом целостности подразумевается нарушение структуры чего-либо в результате проверки какой-нибудь очередной хлеборезкой. Или, например, когда ты прощаешь себе необходимый в передаваемом параметре символ, который вырезается твоим великим смертельным анти-хакиравским аружием.
Ammy Отправлено: 10 Января, 2010 - 19:43:08 • Тема: Безопасность • Форум: Программирование на PHP

Ответов: 22
Просмотров: 2262
Решила создать тему, где хотелось бы обсудить различные варианты обработки входящих данных с целью безопасности и избежания занесения в базу разного рода мусора.

Из всего этого следует несколько вопросов:

1. Какими методами вы пользуетесь для обработки форм?
2. Используете ли вы регулярные выражения для проверки правильности составления логина, или иной информации, визуальная корректность которой необходима для записи в базу данных?
3. Используете ли вы разного рода фильтры в ущерб целостности данных?
4. Чему вы отдаёте больший приоритет: краткости и безопасности, или юзабельности и расширяемости?

А вот, собственно, сомнительные моменты, которые очень часто встречаются в скриптах:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $login = $_POST['login'];
  4.  
  5. // и пошло поехало.. x_X
  6.  
  7. $login = stripslashes($login); // зачем это нужно, если, скажем, волшебные кавычки выключены? А иначе тот, кто захочет исковеркать свой ник, обязательно найдёт такой способ
  8. $login = htmlspecialchars($login); // зачем преобразовывать, если всё тотчас улетит в базу? Кому ты сделаешь лучше?
  9.  
  10. $login = trim($login); // и после густой каши ещё и обрезам пробелы с обоих концов
  11.  
  12. if (empty($login)) {
  13.   echo 'ого ничёсибе как безопасно у вас';
  14. }
  15.  
  16. $result2 = mysql_query ("INSERT INTO users (login) VALUES('$login')");
  17.  
  18. // или же составить огромную кашу из таких проверок, подключив в добавок функцию strip_tags
  19.  
  20. // из многомерного кода Попова
  21.  


или

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))
  4.     {
  5.         $err[] = "Логин может состоять только из букв английского алфавита и цифр";
  6.     }
  7. // http://habrahabr.ru/blogs/php/13726/
  8.  


Мясорубка (фильтр):

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  function antihack () {  
  4.    
  5. $uri = $_SERVER['REQUEST_URI']; //определяем адрес запрашиваемой страницы  
  6.    
  7. $arr_u = explode("?", $uri ); //разделяем адрес на массив  
  8. $url = $arr_u[0];  //того что до знака ?    
  9. $p_url = $arr_u[1]; // и того что после  
  10.    
  11.    
  12. $inj='/script|http|<|>|<|>|SELECT|UNION|UPDATE|AND|exe|exec|INSERT|tmp/i'; //это паттерн возможных типов атак в адресе (их можно дополнить своими)  
  13.    
  14.    
  15. if (preg_match($inj, $p_url )) { // ищем патерн в нашем адресе, в том что за знаком ?  
  16.    
  17.     die("Hacking attempt!"); //если находим - посылаем куда подальше :=)  
  18. }  
  19. }
  20.  
  21. // Откуда: http://phpmaster.su/php-faq/8-kak-zashhititsya-ot-sql-inekcij-xss-atak-na-php.html
  22. // Раскрытие:  http://forum.antichat.ru/threadnav30641-8-10.html
  23.  
  24.  


Я за границей, или примите в дар SQL инъекцию:

http://www[dot]swish-db[dot]com/tutorial[dot][dot][dot]view.php/tid/601
http://www[dot]olate[dot]co[dot]uk/articles/185
http://www[dot]astahost[dot]com/info.php[dot][dot][dot]cript_t2659[dot]html
... + в запасе более 25 лже-статей
Ammy Отправлено: 10 Января, 2010 - 15:50:52 • Тема: SELECT... • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 56
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $fetched = mysql_fetch_assoc($im); // извлекаем данные в ассоциативный массив
  4.  
  5. print_r($fetched); // выводим
  6.  
  7.  


Resource id #6 - указатель на результат запроса. Чтобы извлечь необходимые данные, используйте соответствующие функции.
Ammy Отправлено: 10 Января, 2010 - 15:19:10 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
JustUserR пишет:
Ammy Зачем вообще парить человека юникодом если это тут совершенно непричем было - какой может быть BOM в кодировке CP1251 вообще!

Ха-ха Парить? Никто не парит, и я не парю. А на строки про неизменную анси я на тот момент не посмотрела.

Цитата:
Если не получится то используйте буферизацию - как делать см тут http://ru-coding[dot]com/php_13.php к примеру

Очень доходчиво для новичка. Это пропарит так пропарит. Однако
Ammy Отправлено: 10 Января, 2010 - 15:09:21 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
Попробуйте поместить session_start(); в самое начало кода после <?php. А в самом коде убрать максимально возможным образом все пробелы, но без порчи логики.
Ammy Отправлено: 10 Января, 2010 - 14:52:55 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
В редакторе (при открытом проблемном UTF-8 With BOM файле): "File" -> "Encoding" -> "UTF-8", потом сохранить, и проверить.

Или найти php.ini, открыть его, найти строчку session.cache_limiter, и присвоить ей значение public.

Цитата:
session.cache_limiter =public
Ammy Отправлено: 10 Января, 2010 - 14:44:39 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
А каким редактором вы пользуетесь для написания скриптов? А ещё, если есть возможность, посмотрите на то, в какой кодировке сохраняется файл, который вы редактируете. Вот тема (Champion предупреждает): http://forum.php.su/topic.php?fo...1&topic=3026

И там в самом низу написано, что нужно:
Цитата:
Короче, скрипты, написанные в UTF-8 следует сохранять без BOM и во многих текстовых редакторах есть эта возможность.
Ammy Отправлено: 10 Января, 2010 - 14:30:25 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
Цитата:

Table 'whiteportal.irbis_user' doesn't exist


Это означает, что в вашей базе (whiteportal) не существует таблицы 'irbis_user'.

Делали ли вы данный запрос к базе, который описан в уроке?
http://irbis-team[dot]ru/regist/index.php?a=2

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `irbis_user` (
  3. `id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
  4. `date` TIMESTAMP NOT NULL ,
  5. `login` VARCHAR( 50 ) NOT NULL ,
  6. `password` VARCHAR( 32 ) NOT NULL ,
  7. `hash` VARCHAR( 32 ) NOT NULL ,
  8. `email` VARCHAR( 50 ) NOT NULL ,
  9. `activate` INT( 1 ) NOT NULL ,
  10. PRIMARY KEY ( `id` )  
  11. );
  12.  

(Добавление)
Улыбка
Ammy Отправлено: 10 Января, 2010 - 14:21:32 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
Извиняюсь, моя ошибка: замените на 26 строке ''sql_query" на "mysql_query".

PHP:
скопировать код в буфер обмена
  1. $res = mysql_query("SELECT * FROM `". DB_PREFIX ."user`
  2.            WHERE `login` = '". mysql_real_escape_string($user_login) ."'") or die(mysql_error());
  3.  
  4. if (mysql_num_rows($res) > 0) {
  5.  
  6.     echo 'Есть у нас уже один '. htmlspecialchars($user_login) .'. Попробуйте выбрать другой логин.';
  7.  
  8. }


И соблюдайте правильность написания кавычек.
Предыдущее сообщение обновила, если что.
Ammy Отправлено: 10 Января, 2010 - 14:09:27 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
В registranion_controller.php замените строки:

PHP:
скопировать код в буфер обмена
  1.  
  2.     $res = mysql_query("SELECT COUNT(*) AS `cnt`
  3.                        FROM `". DB_PREFIX ."user`
  4.                        WHERE `login` = '". mysql_real_escape_string($user_login) ."'
  5.                        ");
  6.                    
  7.         if(mysql_result($res,0) > 0)
  8.         {
  9.             echo 'Есть у нас уже один '. htmlspecialchars($user_login) .'. Попробуйте выбрать другой логин.';
  10.         }
  11.  


на:

PHP:
скопировать код в буфер обмена
  1.  
  2. $res = mysql_query("SELECT * FROM `". DB_PREFIX ."user`
  3.            WHERE `login` = '". mysql_real_escape_string($user_login) ."'") or die(mysql_error());
  4.  
  5. if (mysql_num_rows($res) > 0) {
  6.  
  7.     echo 'Есть у нас уже один '. htmlspecialchars($user_login) .'. Попробуйте выбрать другой логин.';
  8.  
  9. }
  10.  

(Добавление)
Antosha пишет:
Впринципе не мешало бы и тут создать такую темку=)
Ну всысле на примерах же легче учиться)


Кстати, хорошая идея.

Речь идёт об уроках, посвящённых написанию приложений, ну и, соответственно, о заданиях для пользователей. Как пример (по первоисточнику вышеописанного кода): http://phpforum[dot]ru/index.php?showtopic=19168
Ammy Отправлено: 10 Января, 2010 - 14:02:10 • Тема: Модераторы форума. • Форум: Колонка администратора

Ответов: 92
Просмотров: 44118
RomAndry, valenok , благодарю вас!

Champion пишет:
супермодератора ей

У меня уже есть один. Ха-ха
Ammy Отправлено: 10 Января, 2010 - 13:28:07 • Тема: Проблемы с регистрацией вылетает ошибка mysql_result • Форум: Программирование на PHP

Ответов: 36
Просмотров: 2757
PHP:
скопировать код в буфер обмена
  1. $res = mysql_query("SELECT * FROM `". DB_PREFIX ."user`
  2.            WHERE `login` = '". mysql_real_escape_string($user_login) ."'") or die(mysql_error());
  3.  
  4. if (mysql_num_rows($res) > 0) {
  5.  
  6.     echo 'Есть у нас уже один '. htmlspecialchars($user_login) .'. Попробуйте выбрать другой логин.';
  7.  
  8. }


Или сразу же вставлять данные в базу, а за результатом того, как прошёл запрос, проследить следующим образом:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if (!$res && mysql_errno() == 1062)) die("Данный логин уже зарегистрирован!");
  4.  
  5.  


Так как ошибка 1062 сообщает нам о 'Duplicate entry'.

Страниц (10): В начало « ... 2 3 4 5 [6] 7 8 9 10 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB