О, нет! Где JavaScript?
Ваш браузер не поддерживает JavaScript или же JavaScript отключен в настройках. Пожалуйста, включите JavaScript в браузере для корректного отображения сайта или обновите свой браузер на поддерживающий JavaScript. Включите JavaScript в своем веб-браузере, чтобы правильно просматривать этот веб-сайт или обновить веб-браузер, поддерживающий JavaScript.

Ошибки кода PHP-Fusion 7.хх.хх - их исправление

Последнее обновление в 7 дней назад
LevaLevaУчастник
Опубликовано 7 дней назад
Давайте рассмотрим код PHP и укажем на некоторые возможные ошибки и области для улучшения.

Общие замечания:

Устаревший код: Комментарий в начале файла указывает на то, что он был адаптирован для версии 7.02. Вполне возможно, что некоторые подходы или функции в этом коде устарели или не рекомендуются в более поздних версиях PHP. Примечание: искусственный интеллект допускает ошибку! Речь идет о версии CMS PHP-Fusion и она 7.02. А не о версии поддерживаемого PHP вообще. Эта версия движка поддерживает PHP версии не выше 5.4 - надо понимать.

Отсутствие проверки ошибок: В нескольких местах код выполняет запросы к базе данных, но не проверяет явно, были ли эти запросы успешными. Это может привести к скрытым ошибкам или непредвиденному поведению.

Конкретные проблемы:

Использование $_GET без фильтрации: В нескольких местах код напрямую использует значения из массива $_GET без надлежащей фильтрации или проверки. Это делает код уязвимым для атак типа внедрения SQL и XSS (межсайтового скриптинга).

Конкатенация строк в SQL-запросах: В некоторых SQL-запросах строки конкатенируются напрямую с данными из $_GET. Это также способствует уязвимости к внедрению SQL. Лучше использовать подготовленные выражения или, по крайней мере, функции экранирования, такие как mysqli_real_escape_string (если вы используете MySQLi).
"Магические числа": В коде присутствуют "магические числа" (например, 604800), которые не имеют явного объяснения. Лучше использовать именованные константы или переменные с понятными именами для повышения читаемости кода.

Смешанный вывод HTML и PHP: Код смешивает HTML-разметку и PHP-код. Это может затруднить чтение и поддержку кода. Рассмотрите возможность использования шаблонизатора или более строгого разделения логики и представления.

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

Примеры проблемных участков кода:

Строка 32:

 PHP

 "SELECT ... WHERE article_id='".$_GET['article_id']."'"


Используйте код с осторожностью.

Здесь значение $_GET['article_id'] используется напрямую в SQL-запросе без экранирования.

Строка 61:

PHP

$article = preg_split("/<!?--s*pagebreaks*-->/i", stripslashes($data['article_article']));


Используйте код с осторожностью.

"Магическое число" 604800 используется без объяснения. Предположительно, это количество секунд в неделе, но лучше было бы использовать именованную константу или переменную.

Строка 161:

PHP

if ($data['article_datestamp'] + 604800 > time() + ($settings['timeoffset'] * 3600)) {


Используйте код с осторожностью.

Рекомендации по улучшению:

- Используйте подготовленные выражения или экранирование: Вместо прямой конкатенации данных в SQL-запросах используйте подготовленные выражения (если ваш драйвер базы данных их поддерживает) или функции экранирования для предотвращения внедрения SQL.

- Фильтрация и проверка ввода: Всегда фильтруйте и проверяйте данные, полученные извне (например, из $_GET или $_POST), прежде чем использовать их в вашем коде.

- Используйте именованные константы и переменные: Замените "магические числа" на именованные константы или переменные с понятными именами.

- Рассмотрите использование шаблонизатора: Шаблонизатор поможет отделить логику от представления и сделает код более читаемым и поддерживаемым.

- Добавьте комментарии: Прокомментируйте свой код, чтобы объяснить назначение различных частей и алгоритмов.
Последнее изменение: Leva в 12-09-2024 18:03, 7 дней назад
LevaLevaУчастник
Опубликовано 7 дней назад
Вот код этой страницы: /articles.php

    <?php
2    /*-------------------------------------------------------+
3    | PHP-Fusion Content Management System
4    | Copyright (C) PHP-Fusion Inc
5    | https://www.php-f...
6    +--------------------------------------------------------+
7    | Filename: articles.php
8    | Author: Nick Jones (Digitanium)
9    +--------------------------------------------------------+
10    | This program is released as free software under the
11    | Affero GPL license. You can redistribute it and/or
12    | modify it under the terms of this license which you
13    | can read by viewing the included agpl.txt or online
14    | at www.gnu.org/licen... Removal of this
15    | copyright header is strictly prohibited without
16    | written permission from the original author(s).
17    +--------------------------------------------------------*/
18    require_once "maincore.php";
19    require_once THEMES."templates/header.php";
20    include LOCALE.LOCALESET."articles.php";
21    
22    # Breadcrumbs
23    # Original Code from Rizald "Elyn" Maxwell
24    # Rewritten for 7.02 by MarcusG
25    
26    $isTrue = false;
27    $str = "";
28    if (isset($_GET['article_id'])&& isnum($_GET['article_id'])){
29     $result = dbquery(
30     "SELECT ta.article_cat, tac.article_cat_name, ta.article_id, ta.article_subject FROM ".DB_ARTICLES." ta
31     LEFT JOIN ".DB_ARTICLE_CATS." tac ON ta.article_cat=tac.article_cat_id
32     WHERE article_id='".$_GET['article_id']."'"
33     );
34     if (dbrows($result)) {
35     $data = dbarray($result);
36     $str .= "<a href='".FUSION_SELF."'><strong>".$locale['404']."</strong></a>";
37     $str .= " &raquo; <a href='".FUSION_SELF."?cat_id=".$data['article_cat']."'>".$data['article_cat_name']."</a>";
38     $str .= " &raquo; <a href='".FUSION_SELF."?article_id=".$_GET['article_id']."'>".$data['article_subject']."</a>";
39     $isTrue = true;
40     }
41    } elseif (isset($_GET['cat_id']) && isnum($_GET['cat_id'])){
42     $result = dbquery(
43     "SELECT article_cat_name FROM ".DB_ARTICLE_CATS."
44     WHERE article_cat_id='".$_GET['cat_id']."'");
45     if (dbrows($result)) {
46     $data = dbarray($result);
47     $str .= "<a href='".FUSION_SELF."'><strong>".$locale['404']."</strong></a>";
48     $str .= " &raquo; <a href='".FUSION_SELF."?cat_id=".$_GET['cat_id']."'>".$data['article_cat_name']."</a>";
49     $isTrue = true;
50     }
51    }
52    
53    if($isTrue){
54     opentable($locale['405']);
55     echo $str;
56     closetable();
57    }
58    
59    # end of breadcrumbs
60    
61    add_to_title($locale['global_200'].$locale['400']);
62    
63    if (isset($_GET['article_id']) && isnum($_GET['article_id'])) {
64     $result = dbquery(
65     "SELECT ta.article_subject, ta.article_article, ta.article_breaks,
66     ta.article_datestamp, ta.article_reads, ta.article_allow_comments, ta.article_allow_ratings,
67     tac.article_cat_id, tac.article_cat_name,
68     tu.user_id, tu.user_name, tu.user_status
69     FROM ".DB_ARTICLES." ta
70     INNER JOIN ".DB_ARTICLE_CATS." tac ON ta.article_cat=tac.article_cat_id
71     LEFT JOIN ".DB_USERS." tu ON ta.article_name=tu.user_id
72     WHERE ".groupaccess('article_cat_access')." AND article_id='".$_GET['article_id']."' AND article_draft='0'"
73     );
74     if (dbrows($result)) {
75     require_once INCLUDES."comments_include.php";
76     require_once INCLUDES."ratings_include.php";
77     $data = dbarray($result);
78     if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
79     if ($_GET['rowstart'] == 0) { $result = dbquery("UPDATE ".DB_ARTICLES." SET article_reads=article_reads+1 WHERE
 article_id='".$_GET['article_id']."'"); }
80     $article = preg_split("/<!?--s*pagebreaks*-->/i", stripslashes($data['article_article']));
81     $pagecount = count($article);
82     $article_subject = stripslashes($data['article_subject']);
83     $article_info = array(
84     "article_id" => $_GET['article_id'],
85     "cat_id" => $data['article_cat_id'],
86     "cat_name" => $data['article_cat_name'],
87     "user_id" => $data['user_id'],
88     "user_name" => $data['user_name'],
89     "user_status" => $data['user_status'],
90     "article_date" => $data['article_datestamp'],
91     "article_breaks" => $data['article_breaks'],
92     "article_comments" => dbcount("(comment_id)", DB_COMMENTS, "comment_type='A' AND comment_item_id='".$_GET['article_id']."'"),
93     "article_reads" => $data['article_reads'],
94     "article_allow_comments" => $data['article_allow_comments']
95     );
96     add_to_title($locale['global_201'].$article_subject, $article[$_GET['rowstart']]);
97     echo "<!--pre_article-->";
98     render_article($article_subject, $article[$_GET['rowstart']], $article_info);
99     echo "<!--sub_article-->";
100     if ($pagecount > 1) {
101     echo "<div align='center' style='margin-top:5px;'>n".makepagenav($_GET['rowstart'], 1, $pagecount, 3,
 FUSION_SELF."?article_id=".$_GET['article_id']."&amp;")."n</div>n";
102     }
103     if ($data['article_allow_comments']) { showcomments("A", DB_ARTICLES, "article_id", $_GET['article_id'],
 FUSION_SELF."?article_id=".$_GET['article_id']); }
104     if ($data['article_allow_ratings']) { showratings("A", $_GET['article_id'], FUSION_SELF."?article_id=".$_GET['article_id']); }
105     } else {
106     redirect(FUSION_SELF);
107     }
108    } elseif (!isset($_GET['cat_id']) || !isnum($_GET['cat_id'])) {
109     opentable($locale['400']);
110     echo "<!--pre_article_idx-->n";
111    
112     //$result = dbquery("SELECT article_cat_id, article_cat_name, article_cat_description FROM ".DB_ARTICLE_CATS." WHERE
 ".groupaccess('article_cat_access')." ORDER BY article_cat_name");
113    
114     // NEW QUERY
115     $result = dbquery(
116     "SELECT ac.article_cat_id, ac.article_cat_name, ac.article_cat_description, COUNT(a.article_cat) AS article_count FROM ".DB_ARTICLES." a
117     LEFT JOIN ".DB_ARTICLE_CATS." ac ON a.article_cat=ac.article_cat_id
118     WHERE ".groupaccess('ac.article_cat_access')."
119     GROUP BY ac.article_cat_id
120     ORDER BY ac.article_cat_name"
121     );
122    
123     $rows = dbrows($result);
124     if ($rows) {
125     $counter = 0; $columns = 2;
126     echo "<table cellpadding='0' cellspacing='0' width='100%'>n<tr>n";
127     while ($data = dbarray($result)) {
128     if ($counter != 0 && ($counter % $columns == 0)) { echo "</tr>n<tr>n"; }
129     //$num = dbcount("(article_cat)", DB_ARTICLES, "article_cat='".$data['article_cat_id']."' AND article_draft='0'");
130     echo "<td valign='top' width='50%' class='tbl article_idx_cat_name'><!--article_idx_cat_name--><a
 href='".FUSION_SELF."?cat_id=".$data['article_cat_id']."'>".$data['article_cat_name']."</a> <span
 class='small2'>(".$data['article_count'].")</span>";
131     if ($data['article_cat_description'] != "") { echo "<br />n<span class='small'>".$data['article_cat_description']."</span>"; }
132     echo "</td>n";
133     $counter++;
134     }
135     echo "</tr>n</table>n";
136     } else {
137     echo "<div style='text-align:center'><br />n".$locale['401']."<br /><br />n</div>n";
138     }
139     echo "<!--sub_article_idx-->n";
140     closetable();
141    } else {
142     $res = 0;
143     $result = dbquery("SELECT article_cat_name, article_cat_sorting, article_cat_access FROM ".DB_ARTICLE_CATS." WHERE
 article_cat_id='".$_GET['cat_id']."'");
144     if (dbrows($result) != 0) {
145     $cdata = dbarray($result);
146     if (checkgroup($cdata['article_cat_access'])) {
147     $res = 1;
148     add_to_title($locale['global_201'].$cdata['article_cat_name']);
149     opentable($locale['400'].": ".$cdata['article_cat_name']);
150     echo "<!--pre_article_cat-->";
151     $rows = dbcount("(article_id)", DB_ARTICLES, "article_cat='".$_GET['cat_id']."' AND article_draft='0'");
152     if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
153     if ($rows != 0) {
154     $result = dbquery(
155     "SELECT article_id, article_subject, article_snippet, article_datestamp FROM ".DB_ARTICLES."
156     WHERE article_cat='".$_GET['cat_id']."' AND article_draft='0' ORDER BY ".$cdata['article_cat_sorting']." LIMIT
 ".$_GET['rowstart'].",".$settings['articles_per_page']
157     );
158     $numrows = dbrows($result); $i = 1;
159     while ($data = dbarray($result)) {
160     $class = ($i%2 ? "tbl1" : "tbl2");
161     if ($data['article_datestamp'] + 604800 > time() + ($settings['timeoffset'] * 3600)) {
162     $new = "&nbsp;<span class='small' style='color:green;'>[".$locale['402']."]</span>";
163     } else {
164     $new = "";
165     }
166     echo "<div class='".$class."'><strong><a
 href='".FUSION_SELF."?article_id=".$data['article_id']."'>".$data['article_subject']."</a></strong>".$new."<br
 />n".preg_replace("/<!?--s*pagebreaks*-->/i", "", stripslashes($data['article_snippet']))."</div>";
167     echo ($i != $numrows ? "<hr />n" : "n"); $i++;
168     }
169     echo "<!--sub_article_cat-->";
170     closetable();
171     if ($rows > $settings['articles_per_page']) echo "<div align='center' style=';margin-top:5px;'>n".makepagenav($_GET['rowstart'],
 $settings['articles_per_page'], $rows, 3, FUSION_SELF."?cat_id=".$_GET['cat_id']."&amp;")."n</div>n";
172     } else {
173     echo "<div style='text-align:center'>".$locale['403']."</div>n";
174     echo "<!--sub_article_cat-->";
175     closetable();
176     }
177     }
178     }
179     if ($res == 0) { redirect(FUSION_SELF); }
180    }
181    
182    require_once THEMES."templates/footer.php";
183    ?>


Какие здесь есть ошибки? ИИ нам говорит следующее:
LevaLevaУчастник
Опубликовано 7 дней назад
Какая ошибка есть в этом php-коде?

Ошибки кода PHP-Fusion 7.02.04

Файл articles.php - постоянно выдает ошибки... примерно 96 строка:

add_to_title($locale['global_201'].$article_subject, $article[$_GET['rowstart']]);


В приведенном PHP-коде есть несколько потенциальных ошибок:

Использование $_GET без проверки: Прямое использование $_GET['rowstart'] без предварительной проверки может привести к уязвимостям типа XSS (межсайтовый скриптинг) и другим проблемам безопасности, если злоумышленник сможет манипулировать параметрами GET-запроса. Рекомендуется всегда фильтровать и валидировать пользовательский ввод.

Неопределенная переменная $article_subject: Если переменная $article_subject не была объявлена и инициализирована ранее в коде, это вызовет ошибку "undefined variable". Убедитесь, что эта переменная существует и содержит корректное значение.

Неизвестная функция add_to_title(): Если функция add_to_title() не является встроенной функцией PHP и не была определена в вашем коде или подключенных библиотеках, это также приведет к ошибке. Убедитесь, что функция существует и доступна в текущем контексте.

Потенциальная проблема с $locale['global_201']: Если массив $locale не был определен или не содержит ключа 'global_201', это может вызвать ошибку или неожиданное поведение. Проверьте, что массив $locale инициализирован и содержит необходимые данные.

Исправленный код (с учетом некоторых предположений):

PHP
// Проверяем и фильтруем пользовательский ввод
$rowstart = isset($_GET['rowstart']) ? (int)$_GET['rowstart'] : 0;

// Предполагаем, что $article_subject и $article существуют и содержат корректные данные
// Также предполагаем, что функция add_to_title() определена

// Используем отфильтрованное значение $rowstart
add_to_title($locale['global_201'] . $article_subject, $article[$rowstart]);


Используйте код с осторожностью.

Важно:

Этот исправленный код предполагает, что переменные $article_subject и $article существуют и содержат корректные данные, а также что функция add_to_title() определена где-то в вашем коде.

Всегда проверяйте и фильтруйте пользовательский ввод, чтобы избежать уязвимостей безопасности.

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

Добавляйте комментарии к коду, чтобы объяснить его назначение и логику.

***
Последнее изменение: Leva в 12-09-2024 17:50, 7 дней назад
Вы можете посмотреть все обсуждения на этом форуме.
Вы не можете начинать новые темы в этом форуме.
Вы не можете отвечать в этой теме.
Вы не можете начать опрос в этом форуме.
Вы не можете делать вложения в сообщения в этом форуме.
Вы можете загружать вложения в этому форуме.
Участвующие в обсуждении пользователи: Leva
Вход на сайт
Не зарегистрированы? Нажмите для регистрации.
Забыли пароль?
Пользователей на сайте
Гостей на сайте: 3
Участников на сайте: 0

Всего зарегистрировано: 26
Новый участник: Leva




Яндекс.Метрика