Перейти к содержимому

Фотография

Ест ли Казхстанские CMS?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 49

#21
CuteSystem

CuteSystem
  • Гость
  • 14 сообщений
Спасибо, учтём. =)
Это ж первая версия только, поэтому работы много, в том числе и по оптимизации.
  • 0

#22
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Вот: http://zz.stackall.com
Мы с Астаны.

Систему не устанавливал, но глядя на структуру и код, создается впечатление, что система - писалась в целях обучения.

Замечания.
1. Надо упростить структуру.
2. Писать комментарии.
3. Принять какие-то правила кодирования.
  • 0

#23
RedLiner

RedLiner
  • Гость
  • 18 сообщений
http://koders.kz/ind...=download&id=22
Ну наша(RedLiner & ][acktool) старая cms ....
Имя GCMS
  • 0

#24
Каражигитов Улан

Каражигитов Улан

    Apple Retailer

  • В доску свой
  • 2 850 сообщений
в общем ответ прост - да, есть
  • 0

#25
romares

romares
  • Гость
  • 44 сообщений
есть казахстанская whitehill cms
whitehill.kz
  • 0

#26
Pantera

Pantera

    ПрЫнцессА на сноУборДЕ

  • В доску свой
  • 5 091 сообщений

есть казахстанская whitehill cms
whitehill.kz


зачем давать ссылку, если сайт на реконструкции?
  • 0

#27
Skif.

Skif.
  • Гость
  • 8 сообщений

Пишу небольшую CMS

 

Если кому интересно: http://sourceforge.net/projects/asti/

Лицензия GPL


  • 0

#28
kornel

kornel
  • В доску свой
  • 9 069 сообщений

Пишу небольшую CMS

Производительность mysql: никогда не используйте var-типы, если это действительно не необходимо, как например в таблице articles. В users и category используйте строгие char(), чтоб строки были известной длинны.
Подумайте, всегда ли всё имеет смысл хранить в базе в utf8? Может дать админу при установке право решить, что он именно хочет?
Не забудьте про индексы. Их явно не хватает.
Безопасность:
В install/register.php 51 строка: А где mysql_real_escape_string()? В q_articles() где привидение типа $ID к целому? Ждем sql иньекций?
Вместо двойного md5() лучше использовать это.

Общее:
Как админ руки бы поотрывал за такое использование mysql! Где mysql_close()? Не забывайте закрывать рессурсы! Если sleep сессии за вас начнут закрывать админы, то вашему движку это может сильно не понравиться!
  • 0

#29
Skif.

Skif.
  • Гость
  • 8 сообщений

 

Пишу небольшую CMS

Производительность mysql: никогда не используйте var-типы, если это действительно не необходимо, как например в таблице articles. В users и category используйте строгие char(), чтоб строки были известной длинны.
Подумайте, всегда ли всё имеет смысл хранить в базе в utf8? Может дать админу при установке право решить, что он именно хочет?
Не забудьте про индексы. Их явно не хватает.
Безопасность:
В install/register.php 51 строка: А где mysql_real_escape_string()? В q_articles() где привидение типа $ID к целому? Ждем sql иньекций?
Вместо двойного md5() лучше использовать это.

Общее:
Как админ руки бы поотрывал за такое использование mysql! Где mysql_close()? Не забывайте закрывать рессурсы! Если sleep сессии за вас начнут закрывать админы, то вашему движку это может сильно не понравиться!

 

 

Ну я начал изучение PHP с создания CMS)))  Недели 3 изучаю, в свободное время)

 

Спасибо за информацию, почитаю как исправить

Вопрос по поводу VAR-типов (я так понял это VARCHAR), ведь указываю длину строки "varchar(30)", длина известна. Чем лучше char на практике?


  • 0

#30
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Тем, что она будет занимать не 30, а не более 30 символов. Цитата:

Типы данных CHAR и VARCHAR очень схожи между собой, но различаются по способам их хранения и извлечения.

В столбце типа CHAR длина поля постоянна и задается при создании таблицы. Эта длина может принимать любое значение между 1 и 255 (что же касается версии MySQL 3.23, то в ней длина столбца CHAR может быть от 0 до 255). Величины типа CHAR при хранении дополняются справа пробелами до заданной длины. Эти концевые пробелы удаляются при извлечении хранимых величин.

Величины в столбцах VARCHAR представляют собой строки переменной длины. Так же как и для столбцов CHAR, можно задать столбец VARCHAR любой длины между 1 и 255. Однако, в противоположность CHAR, при хранении величин типа VARCHAR используется только то количество символов, которое необходимо, плюс один байт для записи длины. Хранимые величины пробелами не дополняются, наоборот, концевые пробелы при хранении удаляются (описанный процесс удаления пробелов отличается от предусмотренного спецификацией ANSI SQL).

char лучше тем, что строка получает фиксированную длинну. Т-е если нужно прочитать строку номер N серверу надо просто перейти в файле на позицию N*длинна строки и прочитать длинна строки байт. Короче компактифицируются некоторые индексы и т.п.

Сообщение отредактировал kornel: 03.04.2014, 13:41:30

  • 0

#31
Skif.

Skif.
  • Гость
  • 8 сообщений

Безопасность: В install/register.php 51 строка: А где mysql_real_escape_string()? В q_articles() где привидение типа $ID к целому? Ждем sql иньекций? Вместо двойного md5() лучше использовать это.

 

Улучшил защиту. SQL-инъекции думаю не пройдут. Напишите пожалуйста если найдете ошибку или дыру в безопасности

 

https://sourceforge.net/projects/asti/


  • 0

#32
kornel

kornel
  • В доску свой
  • 9 069 сообщений
asti->q_articles(): зачем проверять количество article_text отдельным запросом? Тем более по структуре базы его может или быть или нет. Можно просто SELECT `article_text` FROM `articles` WHERE `article_id`='$ID' а потом от него mysql_num_rows() проверить.
admin->content(): Структура кода будет красивее, если сделать
if (isset($_GET) && isset($_GET['menu'])) {
switch($_GET['menu']) {
case 'category':
...
break;
...
}
} else {
require_once('views/home.php');
}

admin/models/*: Везде sql иньекции. Все строковые данные перед использованием в запросах надо терминировать через mysql_real_escape_string(). Даже полученные от вроде безопасных типа base64*(). Все числовые жестко приводить к нужному типу, если они получены хоть от чего-то, отличающегося от for ($i=0;$i<10;$i++).
  • 0

#33
# Ali #

# Ali #
  • Гость
  • 13 сообщений

 

Безопасность: В install/register.php 51 строка: А где mysql_real_escape_string()? В q_articles() где привидение типа $ID к целому? Ждем sql иньекций? Вместо двойного md5() лучше использовать это.

 

Улучшил защиту. SQL-инъекции думаю не пройдут. Напишите пожалуйста если найдете ошибку или дыру в безопасности

 

https://sourceforge.net/projects/asti/

 

Бегло глянул - совсем грустно :(

 

admin/models/login.php - строки 17 и 20 - SQL инъекция

по остальным файлам тоже хватает дыр, нигде не экранируются параметры $_POST, а "как есть" передаются в mysql

 

install/index.php - строки  34-47 "PHP инъекция", можно записать любой пхп код на сайт, а затем выполнить его.


  • 0

#34
Skif.

Skif.
  • Гость
  • 8 сообщений
Бегло глянул - совсем грустно :( admin/models/login.php - строки 17 и 20 - SQL инъекция по остальным файлам тоже хватает дыр, нигде не экранируются параметры $_POST, а "как есть" передаются в mysql

 

Извините, так ведь пользователь и не сможет ввести никакой лишний символ, только латиницу от a до z и цифры, вот

if(!empty($_POST['login']) && !empty($_POST['password']) && preg_match('/^[a-z\d]{4,20}$/i', $_POST['login']))
    {
    $user_login = $_POST['login'];
    $user_pass = $_POST['password'];
    $find_user = mysql_query("SELECT COUNT(user_id) FROM `users` WHERE `user_login` = '$user_login';");                                                                            // 17 строка
    if(mysql_result($find_user, 0) > 0)
        {
        $select = mysql_fetch_assoc(mysql_query("SELECT `user_password`, `user_login`, `user_role` FROM `users` WHERE `user_login` = '$user_login';"));    //20 строка

 

 

А если ее можно обойти, то напишите пожалуйста как это сделать?

 

 

 

install/index.php - строки 34-47 "PHP инъекция", можно записать любой пхп код на сайт, а затем выполнить его.

 

А здесь и не пытался защитить админа от самого себя))  Каталог install уадлить нужно будет после установки, там предварительная настройка подключения к БД и скрипт создания таблицы. После выполнения скрипта, предлагается удалить каталог install

 

Бегло глянул - совсем грустно :(

 

Напишите пожалуйста другие "sql-инъекции".

Спасибо что посмотрели код


Сообщение отредактировал Skif.: 14.04.2014, 17:22:44

  • 0

#35
kornel

kornel
  • В доску свой
  • 9 069 сообщений

А если ее можно обойти, то напишите пожалуйста как это сделать?

У Вас есть 100% уверенность, что в preg_*() нет ошибок, из-за которых можно собрать строку, прошедшую проверку, но которая будет интерпретирована в ';?
В этом отношении можно полагаться только на mysql_real_escape_string(), т-к это ее единственная задача.
  • 0

#36
Skif.

Skif.
  • Гость
  • 8 сообщений

У Вас есть 100% уверенность, что в preg_*() нет ошибок, из-за которых можно собрать строку, прошедшую проверку, но которая будет интерпретирована в ';?

 

Насколько я понял, он только символы и цифры мне оставит, он ведь для этого и предназначен. Или у вас есть информация что можно обойти ее с помощью определенной последовательности символов? Я не знаю, не встречался, просто для примера несколько скриптов проссматривал (довольно распространенных), и там эту функцию использовали, вот и перенял опыт)

 

В этом отношении можно полагаться только на mysql_real_escape_string(), т-к это ее единственная задача.

 

Читал что функцию mysql_real_escape_string() не рекомендуют использовать как защиту от sql-инъекций, лучше что-нибудь другое придумать. Вот и начал использовать preg_*

 

asti->q_articles(): зачем проверять количество article_text отдельным запросом? Тем более по структуре базы его может или быть или нет. Можно просто SELECT `article_text` FROM `articles` WHERE `article_id`='$ID' а потом от него mysql_num_rows() проверить. admin->content(): Структура кода будет красивее, если сделать

 

Спасибо

Примерно так в админке реализовано. Но с шаблонами немного сложнее, т.к. они будут часто меняться, поэтому еще не придумал как это реализовать.

 

admin/models/*: Везде sql иньекции. Все строковые данные перед использованием в запросах надо терминировать через mysql_real_escape_string()

 

Там тоже с помощью preg_*() защищался)

 

Вы считаете лучше использовать mysql_real_escape_string()? или например даже их обоих?


  • 0

#37
kornel

kornel
  • В доску свой
  • 9 069 сообщений

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

Нет, preg_match() предназначен для выявления перл совместимых регулярных выражений. Не смотря на то, что в данном случае, в случае отсутствия багов в libpcre, оно отработает, но: 1 - pcre не создано для терминации строк mysql, поэтому, вместо него лучше использовать специально для этого созданную штуку. 2 - pcre - очень ресурсоемкая библиотека, поэтому лучше ей пользоваться только тогда, когда без pcre не обойтись.

Читал что функцию mysql_real_escape_string() не рекомендуют использовать как защиту от sql-инъекций

Где такую чушь могли написать? 8-\ Это родной предусмотренный самим libmysqlclient* метод безопасного терменирования строк. Возможно Вы имеете ввиду mysql_escape_string() - тогда да.

Вы считаете лучше использовать mysql_real_escape_string()? или например даже их обоих?

Эти библиотеки выполняют разный класс задач - mysql_real_escape_string() предназначена для терминирования строк, которые уйдут в mysql сервер, причем с учетом настроек текущего соединения. preg_*() - набор функций, для работы с перл совместимыми регулярками. Само собой, тот же preg_replace() вполне может заменить в каком-то конкретном случае mysql_real_escape_string(), но во первых именно в каком-то конкретном, а во вторых с большими ресурсозатратами.
  • 0

#38
Skif.

Skif.
  • Гость
  • 8 сообщений

Эти библиотеки выполняют разный класс задач - mysql_real_escape_string() предназначена для терминирования строк, которые уйдут в mysql сервер, причем с учетом настроек текущего соединения. preg_*() - набор функций, для работы с перл совместимыми регулярками. Само собой, тот же preg_replace() вполне может заменить в каком-то конкретном случае mysql_real_escape_string(), но во первых именно в каком-то конкретном, а во вторых с большими ресурсозатратами.

 

Спасибо за подробный ответ, буду использовать обе функции, чтобы максимально обезопаситься)


  • 0

#39
Skif.

Skif.
  • Гость
  • 8 сообщений

Обновил код

 

Админку можете посмотреть на сайте http://asti.astana-it.kz/admin/

Логин admin

Пароль 123456

 

(Отключил возможность редактирования и удаления материалов. Но создавать можно, они все равно отображаться не будут.)

 

Ссылка на CMS https://sourceforge.net/projects/asti/


  • 0

#40
Albek Atyrau

Albek Atyrau
  • Случайный прохожий
  • 2 сообщений

И все таки, есть ли еще казахстанские cms?


Сообщение отредактировал Albek Atyrau: 02.07.2014, 17:10:20

  • 0




Количество пользователей, читающих эту тему: 0

пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2019 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.