PHP.SU

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

Страниц (1): [1]

> Найдено сообщений: 13
Santehnick Отправлено: 07 Февраля, 2014 - 10:18:14 • Тема: Несколько PHP-программистов на почасовую оплату • Форум: FreeLance

Ответов: 23
Просмотров: 4777
funkygodfather пишет:

Оу, я сразу и не увидел, что Вы это дописали к ответу.
Мысли-то я формулировать умею, а вот на "ты" мы не переходили.
Давайте закончим этот флуд с Вашей стороны.

в интернете все на ты, так что узбагойся
Santehnick Отправлено: 25 Июля, 2013 - 10:57:21 • Тема: INTO OUTFILE /home • Форум: Администрирование БД

Ответов: 1
Просмотров: 2215
почитал англоязычные ресурсы и нашел следующее объяснение и решение.

Цитата:

Какая это именно версия Ubuntu и это выпуск Ubuntu Server ?

Недавние релизы Ubuntu Server (такие как 10.04) поставляются с AppArmor и MySQL профиль по-умолчанию, мог быть запущен в режиме обеспечения безопасности. Вы можете это проверить, выполнив команду sudo aa-status примерно так:

# sudo aa-status
5 profiles are loaded.
5 profiles are in enforce mode.
  /usr/lib/connman/scripts/dhclien t-script
  /sbin/dhclient3
  /usr/sbin/tcpdump
  /usr/lib/NetworkManager/nm-dhcp- client.action
  /usr/sbin/mysqld
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode :
  /usr/sbin/mysqld (1089)
0 processes are in complain mode.

Если mysqld включен в режиме безопасности, тогда это вероятно единственная причина отказа в записи. Сообщения также будут записаны в /var/log/messages, когда AppArmor блокирует запись/доступ. Вы можете изменить /etc/apparmor.d/usr.sbin.mysqld и добавить /data/ и /data/* чуть ниже, примерно таким образом:

...
/usr/sbin/mysqld {
    ...
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /var/run/mysqld/mysqld.pid w,
    /var/run/mysqld/mysqld.sock w,
    /data/ r,
    /data/* rw,
}

И перезапустить AppArmor
# sudo /etc/init.d/apparmor reload

ПРЕДУПРЕЖДЕНИЕ: Изменения выше позволят MySQL читать и записывать директорию /data. Мы надеемя, вы уже осознаете последствия этого для безопасности.


Правда логи AppArmor у меня пишутся в системный журнал, /var/log/syslog (Ubuntu 12.10)

Взято здесь[dot] Пусть теперь будет и в рунете ответ.
Santehnick Отправлено: 24 Июля, 2013 - 12:43:46 • Тема: INTO OUTFILE /home • Форум: Администрирование БД

Ответов: 1
Просмотров: 2215
Всем привет, столкнулся с такой проблемой. Нужно именно таким способом создать файл с данными из таблицы mysql. Все делается на домашнем компьютере, с gnu/linux ubuntu. Выполняю в mysql запрос

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM TABLE INTO OUTFILE '/home/user/file'
  3.  


Получаю ошибку

Цитата:

Can't create/write to file '/home/user/file' (Errcode: 13)


Понимаю, что он не может записать/создать файл, но права на /user и даже на /home выставлены следующие

Цитата:
drwxrwxrwx 9 root root 4096 июля 24 13:57 home
drwxrwxrwx 9 user user 4096 июля 24 13:57 user

Но это не помогает, mysql работает под пользователем mysql, пробовал для этих папок менять владельца/группу на mysql, все равно не помогает, при этом без проблем файл создается в /tmp, она имеет следующие права

Цитата:

drwxrwxrwt 16 root root 16384 июля 24 15:27 tmp


или если указать относительный путь, то в папке базы данных, по адресу /var/lib/mysql/db тоже файл создается без проблем, а вот если я хочу его сохранить в домашнюю папку пользователя или куда-нибудь в другое место, например в /var/www то не получается, mysql отвечает ошибкой указанной выше, всем папкам я ставил права 777 и назначал пользователя/группу mysql, это не решает проблемы. Кто сталкивался ? может нужно что-то править в my.cnf ? Заранее спасибо, за возможную помощь.

ps ОС Ubuntu 12.10, mysql Ver 14.14 Distrib 5.5.31
Santehnick Отправлено: 13 Апреля, 2013 - 18:29:26 • Тема: PECL::stats проблема • Форум: PEAR и PECL

Ответов: 2
Просмотров: 1826
Через терминал выдает
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. PHP Fatal error:  Call to undefined function stats_rand_gen_normal() in /home/sda/www/test.loc/battle.php on line 296
  3.  


Наверно проблема все же в модуле, поскольку если попытаться вызвать несуществующую функцию, то и в браузере отображается сообщение о вызове неопределенной функции, а тут выдает 502.
Santehnick Отправлено: 13 Апреля, 2013 - 04:01:23 • Тема: PECL::stats проблема • Форум: PEAR и PECL

Ответов: 2
Просмотров: 1826
Может быть кто-нибудь работал с PECL-расширением stats, а именно с функцией stats_rand_gen_normal У меня беда, ну никак она не хочет работать, пробовал передавать на вход функции и float и int, толку ноль, браузер выдает 502 Bad Gateway, для других rand функций из этого расширения тоже самое, а другие функции не связанные с рандомом работают нормально. Пробовал версии расширения 1.0.1/2/3 везде одно и тоже. ОС GNU/Linux Ubuntu 12.04, PHP 5.3.10, работает как FPM/FastCGI. В интернете не могу найти вообще пользовались этим модулем кто-нибудь или нет.

Спасибо.
Santehnick Отправлено: 16 Марта, 2013 - 17:26:42 • Тема: чат php + ajax • Форум: Программирование на PHP

Ответов: 8
Просмотров: 583
DeepVarvar пишет:

esterio пишет:
А ч ето такое
Это фильм-трилогия: Куб, Куб 2 (Гиперкуб), Куб 3 (0). Советую посмотреть в написанной мной очередности.

(Добавление)
Santehnick пишет:
Нет конечно, это же чат.
Тогда оставьте бессмысленные попытки защиты сообщений от повторного прочтения, путем увеличения нагрузки на сервер.


Ну да, видимо придется last id хранить на стороне сервера. Ничего, не поделать. Спасибо.
Santehnick Отправлено: 16 Марта, 2013 - 17:06:23 • Тема: чат php + ajax • Форум: Программирование на PHP

Ответов: 8
Просмотров: 583
DeepVarvar пишет:
Это что-ж, я как пользователь не имею права позырить историю сообщений в комнате, к которой у меня есть доступ?
Бред же.

Нет конечно, это же чат.

esterio пишет:
Ну я бы сделал так:
Добавил поле - некую метку прочитано ли сообщение
если польователь откривает чат - формируем на ПХП последние скажем 10 сообщений. Отмечаем все непрочитание сообщение как прочитание
тепер при AJAX запросе - отправляем все сообщение в которых метка стоит "непрочитание". И также ставим их проситаими.
как-то так


С таким успехом проще хранить время последнего обращения к серверу или последний id на стороне сервера, тогда никаких проблем не будет, но меня интересует именно просто передача last id на клиент и последующая передача от клиента на сервер, при этом чтобы нельзя было подменой этого самого last id вывести старые сообщения.
Santehnick Отправлено: 16 Марта, 2013 - 16:43:03 • Тема: чат php + ajax • Форум: Программирование на PHP

Ответов: 8
Просмотров: 583
Планирую написать чат на php + ajax, под хранилище наверное буду использовать redis. Возник вопрос по поводу того, как извлекать новые сообщения для пользователя. Изначально сразу пришла идея, что клиенту передавать id последнего сообщения, который он потом обратно передает серверу при запросе и сервер соответственно возвращает все сообщения начиная с этого id, но тогда пользователь может подменить id и получить не то, что предполагалось, а те сообщения, которые уже выводились вместе с новыми, а это мне не нужно. Потом думал, что проверять по времени, допустим чат обновляется раз в 15 секунд, тогда показываем только те сообщения, где время сообщения больше чем текущее время - 15 секунд, но тут опять может возникнуть проблема, что у пользователя повис браузер на несколько секунд и соответственно есть риск, что он не получит те сообщения, которые должен был получить. Потом думал, есть вариант чтобы хранить время последнего обращения / id последнего сообщения или что-нибудь другое на стороне сервера в базе или сессии например, но не нравится то, что придется постоянно перезаписывать это значение.

Пока лучший для меня из всех вариантов это передача id последнего сообщения клиенту, который будет послан вместе со следующим запросом к серверу. Но нужно как-то сделать, чтобы клиент не смог бы получить те сообщения, которые уже ему выводились ранее. Может как-то шифровать этот id или что-то еще. Может есть у кого какие идеи или опыт написания такого чата?
Santehnick Отправлено: 19 Октября, 2011 - 21:52:41 • Тема: Защита от XSS и SQL-инъекций • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9088
illy пишет:
Может ли инъекция навредить при передаче данных.
Вот ввёл он в логин скрипт инъекции и отправил.
Обработчик берёт значение этого логина и просто вносит в базу.
Здесь он никак не навредит? Только при выводе информации?


навредит и еще как, сначала проверят проходит ли sql-injection, специально напишут так, чтобы запрос к базе данных получился бы не верным и соответственно получится ошибка, поймут что есть уязвимость и вместе с этим запросом могут отправить еще какие-нибудь или в этот допишут что-нибудь интересное, зависит от ситуаций и как написан сам запрос. поэтому экранировать нужно всегда. А вот в случае с xss, то тут да, навредить могут только при выводе информации на страницу, но опять же смотри, лучше один раз на этапе записи данных в базу позаботится о преобразовании спец. символов в html сущности при помощи функции htmlspecialchars() и быть уверенным, чем потом быть параноиком и при каждом выводе данных из базы обрабатывать их этой функцией.
(Добавление)
Ammiak пишет:
Цитата:
Однако вполне можно поэкспериментировать с вводом длинных значений в ваши поля, ограничений на это я не нашел.

Ограничение на длину пароля я делал, на стороне клиента через js. Длину логина специально не ограничивал, должна ограничиваться длиной самого инпута (maxlength="36"), в первом посте не указал

нужно все равно проверять на стороне сервера, js при желании смогут отключить в браузере или вообще возьмут данные тебе и отправят при помощи поддельной html-формы. ну или если лень в скрипте проверять, можно в мускуле ограничить, просто задать длину полю и всё, больше этого все равно как не старайся мускуль записывать откажется.
Santehnick Отправлено: 05 Сентября, 2010 - 14:56:25 • Тема: Пользовательская функция в Пользовательской функции • Форум: Программирование на PHP

Ответов: 7
Просмотров: 591
Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1.  if($this->check_add_to_mysql($login)) return $error ;

А сохранять то, что вернула функция кто будет?
PHP:
скопировать код в буфер обмена
  1.  if($tmp = $this->check_add_to_mysql($login)) return $tmp ;


Santehnick пишет:
да блин причем тут глобал вообще

К тому, что так вообще не делают. Что оно работает - это понятно, но так не делают.
Кстати, у вас спокойно пройдёт SQL инъекция. Всё, что идёт из внешних источников (в первую очередь $_GET, $_POST, куки) в базу экранируйте через mysqli_real_escape_string / mysql_real_escape_string (в зависимости от того, какую используете библиотеку)

спасибо. На счет sql-injection в курсе, как защититься тоже, написал пользовательскую функцию простенькую от защиты sql-injection, просто буду перед запросом все переменные ей обрабатывать, пока не успел просто сделать этого.
Santehnick Отправлено: 05 Сентября, 2010 - 13:50:43 • Тема: Пользовательская функция в Пользовательской функции • Форум: Программирование на PHP

Ответов: 7
Просмотров: 591
JustUserR пишет:
Santehnick пишет:
Мои функции находятся в классе, я прежде чем записать новую строку в Базу Данных, хочу проверить её своей функцией, которая проверяет корректно ли заполнено поле.
Если вы используете класс для инкапсуляции собственного соединения с БД то желательно сохранять все переменные внутни него - в вашем случае получается что вы испоьзуете внешнюю переменную к которой обращаетесь в оператором global в то время как для каждого экземпляра класса доступ должен быть через $this-объект

да блин причем тут глобал вообще. я пишу о том, что мне нужно вызвать как-то функцию проверки(#1) в функции добавления в базу данных новой строки(#2) и все! больше ничего, все остальное у меня работает нормально. И я писал что функции находятся в одном классе, так же говорил что в функции add_to_mysql я пробовал вызывать функцию check_add_to_mysql, вот таким образом $this->check_add_to_mysql($login) ; именно при помощи ключевого слова $this, потому что еще раз говорю обе функции находятся в одном классе.

Чтобы потом когда я создам объект и обращусь к функции вот так
PHP:
скопировать код в буфер обмена
  1. echo $reg->add_to_mysql($login) ;
у меня в этой функции чтобы сработала функция проверки (check_add_to_mysql) и вывела мне переменную $error на экран, точнее её содержимое, а если все условия пройдутся нормально, то запись добавлялось в базу данных. А сейчас у меня не хочет работать функция проверки в функции добавления, когда я вызываю её $this->check_add_to_mysql($login) ; вот так, она не срабатывает и данные сразу добавляются в базу, не знаю уже как объяснить.

global $db это сделано для того, чтобы я мог обратиться к объекту $db и работать с его функциями, например с sql_query. это у меня все работает прекрасно.
(Добавление)
все сам догнал, всего-то надо было в функции добавления написать вот так:

$err = $this->check_add_to_mysql($login) ;
if($err) return ($err) ;

тогда все работает как нужно. А написано что портал для новичков, а скидывают какие-то абзацы из книг мне Огорчение
Santehnick Отправлено: 05 Сентября, 2010 - 13:28:50 • Тема: Пользовательская функция в Пользовательской функции • Форум: Программирование на PHP

Ответов: 7
Просмотров: 591
JustUserR пишет:
Santehnick пишет:
Мне нужно использовать первую функцию во второй функции
В языке PHP все пользовательские функции не являются объектами первого рода и всегда сохраняются в глобальной области видимости и являются независимыми от местоположения их определения - тем не менее функции в общем виде могут находиться в некотором пространстве имен определяемым именем класса и операцией расширения области видимости При этом несмотря на то что пользовательские функции являются инвариантными относительно расположения их описания - тем не менее добавление очередной функции в общую таблицу присходит только после явного выполнения кода в которой находится ее определение - таким образрм одна функция может быть определена внутри другой но это означает лишь ее отложенное добавление к общей таблице функций
Для вызова одной пользовательской функции внутри другой необходимо только удостовериться что в указанный момент запрашиваемая функция уже инициализирована - и ее жальшейший выхов происходит только по имени

такое чувство что какой-то абзац из книги, мне не это вовсе нужно, а решение проблемы, почему не работает. Мои функции находятся в классе, я прежде чем записать новую строку в Базу Данных, хочу проверить её своей функцией, которая проверяет корректно ли заполнено поле.
Santehnick Отправлено: 05 Сентября, 2010 - 11:29:00 • Тема: Пользовательская функция в Пользовательской функции • Форум: Программирование на PHP

Ответов: 7
Просмотров: 591
Написал две функции Улыбка

Функция проверки логина
PHP:
скопировать код в буфер обмена
  1.  
  2.         function check_add_to_mysql($login)
  3.         {
  4.                 global $db ;
  5.                
  6.                 $sql = "SELECT login FROM users WHERE login='" . $login . "'" ;
  7.                 $result = $db->sql_query($sql) ;
  8.                 $row = $db->sql_fetchrow($result) ;
  9.                
  10.                 if($login == '') {
  11.                         $error .= "Вы забыли указать логин персонажа.<br />" ;
  12.                 }
  13.                 if(strlen($login) < 2 or strlen($login) > 15){
  14.                         $error .= "Логин не может быть короче 2-х символов и длиннее 15-ти.<br />" ;
  15.                 }
  16.                 if(preg_match("![A-Za-z]!i",$login) and preg_match("![А-Яа-я]!i",$login)) {
  17.                         $error .= "В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.<br />" ;
  18.                 }
  19.                 if(preg_match("!^\d[A-Za-zА-Яа-я]!i",$login)) {
  20.                         $error .= "Логин не может начинаться с цифры.<br />" ;
  21.                 }
  22.                 if(preg_match("![^a-zA-ZА-Яа-я-_\s]!i",$login,$matches)) {
  23.                         $error .= "Вы использовали в логине запрещенный символ: " .$matches[0]. ".<br />" ;
  24.                 }
  25.                 if(preg_match("!(.)\\1\\1!", $login)) {
  26.                         $error .= "Запрещено использование трех и более одинаковых символов подряд.<br />" ;
  27.                 }
  28.                 if(preg_match("!([-_\s])\\1!", $login)) {
  29.                         $error .= "Запрещено использовать два разделительных символа подряд.<br />" ;
  30.                 }
  31.                 if(substr_count($login,"-") > 2 or
  32.                    substr_count($login," ") > 2 or
  33.                    substr_count($login,"_") > 2) {
  34.                         $error .= "Не более двух пробелов, тире или символов подчеркивания.<br />" ;
  35.                 }
  36.                 if(!preg_match("!^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я_ -\s]+[a-zA-Zа-яА-Я]$!",$login)) {
  37.                         $error .= "Логин не может начинаться или заканчиваться пробелом, тире или символом подчеркивания.<br />" ;
  38.                 }
  39.                 if($row['login'] == $login) {
  40.                         $error .= "Логин $login уже занят, выберите другой.<br />" ;
  41.                 }
  42.                                                                        
  43.                 return $error ;
  44.         }
  45.  


И функция добавления в базу данных

PHP:
скопировать код в буфер обмена
  1.  
  2.         function add_to_mysql($login)
  3.         {
  4.                 global $db ;
  5.                
  6.                 $sql = "INSERT INTO `users` (`borncity`,`login`,`pass`,`email`,`realname`,`borndate`,`sex`,`ip`,`shadow`,`refer`) VALUES('Авалон','$login','".md5($_POST['password'])."','{$_POST['email']}','{$_POST['name']}','1','{$_POST['sex']}','127.0.0.1','1','1')" ;
  7.                 $result = $db->sql_query($sql) ;
  8.                
  9.                 $good = "Все прошло успешно!" ;
  10.                
  11.                 return $good ;
  12.         }
  13.  


Мне нужно использовать первую функцию во второй функции, т.е. когда я вызываю в нужно месте функцию add_to_mysql(параметр) мне нужно чтобы внутри неё выполнялась функция check_add_to_mysql(параметр), возращала $error и эта переменная отображалась бы на экране.

Пробовал делать так

PHP:
скопировать код в буфер обмена
  1.  
  2.         function add_to_mysql($login)
  3.         {
  4.                 global $db ;
  5.                 if($this->check_add_to_mysql($login)) return $error ;
  6.                
  7.                 $sql = "INSERT INTO `users` (`borncity`,`login`,`pass`,`email`,`realname`,`borndate`,`sex`,`ip`,`shadow`,`refer`) VALUES('Авалон','$login','".md5($_POST['password'])."','{$_POST['email']}','{$_POST['name']}','1','{$_POST['sex']}','127.0.0.1','1','1')" ;
  8.                 $result = $db->sql_query($sql) ;
  9.                
  10.                 $good = "Все прошло успешно!" ;
  11.                
  12.                 return $good ;
  13.         }
  14. }
  15.  


то в базу уже не записывает, видимо все-таки что-то возращается, но и на экран тоже ничего не выводится при вызове функции Недовольство, огорчение

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB