Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Прошу дать справедливую оценку
 
 автор: Ури Геллер   (05.02.2010 в 20:38)   письмо автору
67 Кб
 
 

указать на допущенные ошибки, недостатки, вообщем вынести вердикт гавнокод это или нет

  Ответить  
 
 автор: heed   (05.02.2010 в 21:20)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 20:38)
 

на первый взгляд

1. с включнными Noitice куча уведомлений
про всякие такие места

if ($_GET["id"]) {
$entry_id = intval($_GET["id"]);

2, Не понял куда и как пароль сохранить
3. Ссылки "вперёд" и "назад" не исчезают при отсутствии надобности

и почитать нечего, насчёт возможностей ,) и какой-же всётаки пароль

  Ответить  
 
 автор: Ури Геллер   (05.02.2010 в 21:25)   письмо автору
 
   для: heed   (05.02.2010 в 21:20)
 

12345 или 123
А про возможности добавление/редактирование/удаление категории, записи, комментарии база не нужна - залил на хост и забыл рсс лента. А про ссылки взад/вперед это дело вкуса мне они не мешают

  Ответить  
 
 автор: Trianon   (06.02.2010 в 02:37)   письмо автору
 
   для: heed   (05.02.2010 в 21:20)
 

>1. с включнными Noitice куча уведомлений

Thx.
Тогда я даже соваться не стану

  Ответить  
 
 автор: t3ma   (05.02.2010 в 21:23)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 20:38)
 

Извините конечно, это тоже самое что сказать посмотрите правильно ли я собрал машину ?
Не думаю что в Вашей папке файлов будет кто-то разбираться

  Ответить  
 
 автор: heed   (05.02.2010 в 21:37)   письмо автору
 
   для: t3ma   (05.02.2010 в 21:23)
 

может быть некоторым и просто интересно поразбираться в чём задумки там есть

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

// что-то вроде блога на файлах, я так понял

  Ответить  
 
 автор: neadekvat   (05.02.2010 в 21:38)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 20:38)
 

// тут есть небольшой недочет, но его исправлять мне лень// исправлено
Может, нужно было просто удалить эту строчку?
// так для красоты
$entry_id = intval($_GET["id"]); // php-inj
fwrite($f, pack("L", $cat_id)); // id категории
Зачем эти комментарии?

if (get_magic_quotes_gpc() === 1) {
                $entry_name = stripslashes($entry_name);
                $entry_desc = stripslashes($entry_desc);
                $entry_body = stripslashes($entry_body);
            }

Мне кажется, или магические кавычки используются при sql запросах? Тогда причем тут он.
Сообщение о том, что сообщение добавлено выводится вне зависемости от того, добавлено ли оно на самом деле или нет.
Ссылки "вперед-назад" есть, причем даже адрес страницы меняется, а вот запись мне как одна показывается - так она там и остается.

Это то, что сразу увидел, дальше капать не буду - понятно, что все очень сыро. По крайней мере, расставьте комментарии - нихрена ж не понятно, что и для чего вы делаете.

  Ответить  
 
 автор: Ури Геллер   (05.02.2010 в 22:23)   письмо автору
 
   для: neadekvat   (05.02.2010 в 21:38)
 

ковычки нужно убирать чтобы можно было писать ссылки, а то в противном случае вот так получается <a href=\"\"></a> и ссылка не работает

$entry_id = intval($_GET["id"]); // php-inj
тут была php инъекция что непонятного? в id передаётся имя файла из которого считываются данные, можно было так узнать пароль администратора site.ru/entry.php?act=read&id=../blog_settings.php

  Ответить  
 
 автор: neadekvat   (05.02.2010 в 22:28)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 22:23)
 

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

> $entry_id = intval($_GET["id"]); // php-inj
> тут была php инъекция что непонятного?
Вот и я о том же. Зачем ставить комментарии там, где и без них все ясно?

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 14:50)   письмо автору
 
   для: neadekvat   (05.02.2010 в 22:28)
 

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

  Ответить  
 
 автор: Trianon   (06.02.2010 в 15:18)   письмо автору
 
   для: Ури Геллер   (06.02.2010 в 14:50)
 

Для этого применяется htmlspecialchars
А вовсе не.

  Ответить  
 
 автор: Тень&   (06.02.2010 в 15:37)
 
   для: neadekvat   (05.02.2010 в 22:28)
 

stripslashes нужно делать при включенных magic quotes вне зависимости от того связан скрипт с БД или нет.

  Ответить  
 
 автор: heed   (05.02.2010 в 22:34)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 20:38)
 

c 123 зашёл
, при попытке добавления что-то
из
<form action="<?=".".$_SERVER["PHP_SELF"]."?act=".$act.(($act == "edit") ? "&amp;id=".$entry_id : "")?>" method="post" >
получилось
http://comp/_test/_test/entry.php?act=edit&id=1
, те два _test/ вместо одного

сделал просто action="?act=......" добавило


_________________________________

http://comp/_test/comment.php?act=add&id=2
переменная
$comment_id = intval($_GET["comment_id"]);

вот поэтому полезно включать notice

,

  Ответить  
 
 автор: neadekvat   (05.02.2010 в 22:40)   письмо автору
 
   для: heed   (05.02.2010 в 22:34)
 

У него все адреса указаны от корневой папки, поэтому тестировать в другом каталоге, кроме корневого - невозможно (разве что "на лету" менять код action'а, но мне надоело это после первого же раза)

  Ответить  
 
 автор: heed   (05.02.2010 в 22:57)   письмо автору
 
   для: neadekvat   (05.02.2010 в 22:40)
 

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

В своих таких скриптах всёже попроще разбираться, там хоть в голове какие-то комментарии частично уцелевают
, а в код я только слегка так заглянул, как-то интереснее разбираться когда всё работает
, будем ждать новой версии :)

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 14:35)   письмо автору
 
   для: heed   (05.02.2010 в 22:57)
 

А что не работает?

  Ответить  
 
 автор: .heed   (06.02.2010 в 18:50)
 
   для: Ури Геллер   (06.02.2010 в 14:35)
 

оказалось работало
просто когда добавлял комментарий , при успешном добавлении проссто чистый лист , с таким текстом
Notice: Undefined index: comment_id in H:\home\comp\www\_test\comment.php on line 6
Notice: Undefined variable: str in H:\home\comp\www\_test\comment.php on line 19
Warning: Cannot modify header information - headers already sent by (output started at H:\home\comp\www\_test\comment.php:6) in H:\home\comp\www\_test\comment.php on line 26

И всё думал на главной странице коммент появиться должен, там 10 штук notice и один такой-же warning
,(кстати прокрутка появляется горизонтальная) оказалось нужно нажимать на ссылку "читать" :) проблема была в том что я текст везде один и тот-же вставлял , и не смог понять что и где показывает.

и как я говорил
<form action="<?=".".$_SERVER["PHP_SELF"]."?act=".$act.(($act == "edit") ? "&amp;id=".$entry_id : "")?>" method="post" >это не правильный адресс

много чего не нравится
, но если-бы мне нужен был похожий скрипт, я-бы в любом случае просто сделал-бы всё сам с чистого листа, привычка, поэтому бывает только когда нужно что-то изменить совсем чуть-чуть , а всё по новой из-за какой-то мелочи делать лень ,) так появляются первые комментарии,
А-то приходится искать имена переменных , чтобы вспомнить в каком месте я что-то там такое хитрое сделал, но забыл что и где именно

Вчера посто ещё полез потом чистить error.log , и как обычно началось взаглядывание во всякие .conf, которое закончилось тотальной перенастройкой серверов, с неоднократными переходами из под одной виндовс под другую :)

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 19:08)   письмо автору
 
   для: .heed   (06.02.2010 в 18:50)
 

да убрал я эту точку теперь всё работает

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 20:43)   письмо автору
 
   для: .heed   (06.02.2010 в 18:50)
 


<?php

include "./inc.php";

$id intval($_GET["id"]);
$comment_id intval($_GET["comment_id"]);


switch (
$act) {
    case 
"add":
        if (
$_POST["code"] !== $_SESSION["code"]) {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> неверный проверочный код!<br>";
            
Bot();
            die();
        }
        else if (
trim($_POST["name"]) === "") {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> вы не указали имя!<br>";
            
Bot();
            die();
        }
        else if (
trim($_POST["body"]) === "") {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> вы не ввели сообщение!<br>";
            
Bot();
            die();
        }
        
$f fopen("./data/comments/$id""ab");
        
flock($fLOCK_EX);
        
$str.= pack("L"time());
        
$str.= pack("A$comment_name_size"substr(strip_tags(trim($_POST["name"])), 0$comment_name_size));
        
$str.= pack("A$comment_body_size"substr(strip_tags(trim($_POST["body"])), 0$comment_body_size));
        
$str.= pack("A$comment_ans_size""");
        
fwrite($f$str);
        
flock($fLOCK_UN);
        
fclose($f);
        
header("Location: ./entry.php?act=read&id=$id");
        die();
        break;
    case 
"edit":
        include 
"./admin.php"// защита страницы
        
$f fopen("./data/comments/$id""rb+");
        if (
$_POST["send"]) {
            
flock($fLOCK_EX);
            
fseek($f$comment_id * ($comment_name_size $comment_body_size $comment_ans_size) + 4);
            
$str.= pack("A$comment_name_size"substr(strip_tags($_POST["name"]), 0$comment_name_size));
            
$str.= pack("A$comment_body_size"substr(strip_tags($_POST["body"]), 0$comment_body_size));
            
$str.= pack("A$comment_ans_size"substr(strip_tags($_POST["ans"]), 0$comment_ans_size));
            
// var_dump($str);
            
fwrite($f$str);
            
flock($fLOCK_UN);
            
fclose($f);
            
header("Location: ./entry.php?act=read&id=$id");
            die();
        }
        
flock($fLOCK_SH);
        
fseek($f$comment_id * ($comment_name_size $comment_body_size $comment_ans_size) + 4);
        
$name trim(fread($f$comment_name_size));
        
$body trim(fread($f$comment_body_size));
        
$ans trim(fread($f$comment_ans_size));
        
flock($fLOCK_UN);
        
fclose($f);
        
Top($settings["blog_title"], "Редактировать комментарий");
         echo 
"<form action=\"./comment.php?act=edit&amp;id=$id&amp;comment_id=$comment_id\" method=\"post\">
     Имя: <input type=\"text\" name=\"name\" size=\"32\" value=\""
.htmlspecialchars($name)."\"><br><br>
     Комментарий: <br>
     <textarea cols=\"32\" rows=\"5\" name=\"body\">"
.htmlspecialchars($body)."</textarea><br><br>
     Ответ: <br>
     <textarea cols=\"32\" rows=\"5\" name=\"ans\">"
.htmlspecialchars($ans)."</textarea><br><br>
     <input type=\"submit\" name=\"send\" value=\"Отправить\"><br><br><br><br>\n</form>\n"
;
         
Bot();
         break;
    case 
"del":
        include 
"./admin.php"// защита страницы
        
$f fopen("./data/comments/$id""rb+");
        
$record_size $comment_name_size $comment_body_size $comment_ans_size;
        
$kol filesize("./data/comments/$id") / $record_size;
        
flock($fLOCK_EX);
        
$i 0;
        while (
$i $kol) {
            if (
$rewrite) {
                
$seek ftell($f); 
                
fseek($f$record_sizeSEEK_CUR); 
                
$str fread($f$record_size); 
                
fseek($f$seek); 
                
fwrite($f$str);
            }
            else if (
$i == $comment_id) {
                
fseek($f$record_size $iSEEK_CUR);
                
$rewrite true;
            }
            ++
$i;
        }
        
$size ftell($f);
        
ftruncate($f$size); 
        
flock($fLOCK_UN);
        
fclose($f);
        
header("Location: ./entry.php?act=read&id=$id");
        die();
        break;
}

?>

  Ответить  
 
 автор: .heed   (06.02.2010 в 21:15)
 
   для: Ури Геллер   (06.02.2010 в 20:43)
 

даже не знаю чего сказать :) то что можно вставить слово из 2048и букв и растянуть дизайн это я понял,
, то что можно отключив в браузере автоматическое перенаправление с одним и тем-же кодом с картинки напихать массу комментариев с минимальными затратами трафика, это я тоже понял.
substr(strip_tags(trim($_POST["name"])) конечно спасает кое от чего, но пустые сообщения тоже добавляются
, или наоборот никакой возможности запостить что-нибудь с < и взависимости от magic_quotes можно посмотреть только экранированные кавычки

так идея хранить комменты в одном файле интересная, я так думаю работа идёт как со строками фиксированной длинны, быстрая навигация, малый расход памяти, но только файл занимает чуть больше места. (отправлять в коментарии нулевые байты ещё не пробовал ,) всё POST'ом , а браузером не понял как в запрсе отправить %00 )
Впрочем сравнительно с таким-же скриптом на mysql , у меня под виндовс работает медленнее, но на том сайте время показывает намного лучше.

Но как-то всётаки слишком просто мне показалось, простым пользователям незачем видеть кнопки "edit" "del"
, а так время покажет, поселятся ли у вас там спам-роботы :) хоть какая капча всё-ж имеется

А так если чисто для себя то можно просто по мелочи поправить

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 21:48)   письмо автору
 
   для: .heed   (06.02.2010 в 21:15)
 

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


<?php

include "./inc.php";

$id intval($_GET["id"]);
$comment_id intval($_GET["comment_id"]);


switch (
$act) {
    case 
"add":
        if (!
file_exists("./data/comments/$id")) {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> попытка добавления комментария к несуществующей записи!<br>";
            
Bot();
            die();
        }
        else if (
$_POST["code"] !== $_SESSION["code"]) {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> неверный проверочный код!<br>";
            
Bot();
            die();
        }
        else if (
trim($_POST["name"]) === "") {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> вы не указали имя!<br>";
            
Bot();
            die();
        }
        else if (
trim($_POST["body"]) === "") {
            
Top($settings["blog_title"], "Ошибка");
            echo 
"<b>Ошибка:</b> вы не ввели сообщение!<br>";
            
Bot();
            die();
        }
        
$f fopen("./data/comments/$id""rb+");
        
flock($fLOCK_EX);
        
fseek($f0SEEK_END);
        
$str.= pack("L"time());
        
$str.= pack("A$comment_name_size"substr(strip_tags(trim($_POST["name"])), 0$comment_name_size));
        
$str.= pack("A$comment_body_size"substr(strip_tags(trim($_POST["body"])), 0$comment_body_size));
        
$str.= pack("A$comment_ans_size""");
        
fwrite($f$str);
        
flock($fLOCK_UN);
        
fclose($f);
        
header("Location: ./entry.php?act=read&id=$id");
        die();
        break;
    case 
"edit":
        include 
"./admin.php"// защита страницы
        
$f fopen("./data/comments/$id""rb+");
        if (
$_POST["send"]) {
            
flock($fLOCK_EX);
            
fseek($f$comment_id * ($comment_name_size $comment_body_size $comment_ans_size) + 4);
            
$str.= pack("A$comment_name_size"substr(strip_tags($_POST["name"]), 0$comment_name_size));
            
$str.= pack("A$comment_body_size"substr(strip_tags($_POST["body"]), 0$comment_body_size));
            
$str.= pack("A$comment_ans_size"substr(strip_tags($_POST["ans"]), 0$comment_ans_size));
            
// var_dump($str);
            
fwrite($f$str);
            
flock($fLOCK_UN);
            
fclose($f);
            
header("Location: ./entry.php?act=read&id=$id");
            die();
        }
        
flock($fLOCK_SH);
        
fseek($f$comment_id * ($comment_name_size $comment_body_size $comment_ans_size) + 4);
        
$name trim(fread($f$comment_name_size));
        
$body trim(fread($f$comment_body_size));
        
$ans trim(fread($f$comment_ans_size));
        
flock($fLOCK_UN);
        
fclose($f);
        
Top($settings["blog_title"], "Редактировать комментарий");
         echo 
"<form action=\"./comment.php?act=edit&amp;id=$id&amp;comment_id=$comment_id\" method=\"post\">
     Имя: <input type=\"text\" name=\"name\" size=\"32\" value=\""
.htmlspecialchars($name)."\"><br><br>
     Комментарий: <br>
     <textarea cols=\"32\" rows=\"5\" name=\"body\">"
.htmlspecialchars($body)."</textarea><br><br>
     Ответ: <br>
     <textarea cols=\"32\" rows=\"5\" name=\"ans\">"
.htmlspecialchars($ans)."</textarea><br><br>
     <input type=\"submit\" name=\"send\" value=\"Отправить\"><br><br><br><br>\n</form>\n"
;
         
Bot();
         break;
    case 
"del":
        include 
"./admin.php"// защита страницы
        
$f fopen("./data/comments/$id""rb+");
        
$record_size $comment_name_size $comment_body_size $comment_ans_size;
        
$kol filesize("./data/comments/$id") / $record_size;
        
flock($fLOCK_EX);
        
$i 0;
        while (
$i $kol) {
            if (
$rewrite) {
                
$seek ftell($f); 
                
fseek($f$record_sizeSEEK_CUR); 
                
$str fread($f$record_size); 
                
fseek($f$seek); 
                
fwrite($f$str);
            }
            else if (
$i == $comment_id) {
                
fseek($f$record_size $iSEEK_CUR);
                
$rewrite true;
            }
            ++
$i;
        }
        
$size ftell($f);
        
ftruncate($f$size); 
        
flock($fLOCK_UN);
        
fclose($f);
        
header("Location: ./entry.php?act=read&id=$id");
        die();
        break;
}

?>


Про ссылки которые не должен видеть посетитель, это уже просчеты проектирования которые сложно (не охота) исправлять

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 14:48)   письмо автору
 
   для: neadekvat   (05.02.2010 в 22:40)
 

адреса у меня относительные, а насчет того что из корня не работает то ошибка в точке в action в файлах settings.php, cat.php, entry.php если её убрать всё прекрасно работает

  Ответить  
 
 автор: Ури Геллер   (06.02.2010 в 18:25)   письмо автору
 
   для: Ури Геллер   (05.02.2010 в 20:38)
 

Тут мелких неисправностей нет, пример можно увидеть на http://www.moysite.co.cc

  Ответить  
 
 автор: Ури Геллер   (10.02.2010 в 14:33)   письмо автору
 
   для: Ури Геллер   (06.02.2010 в 18:25)
 

Тень, к сожалению твои собщения были удалены модератором, я их не прочитал, можешь снова высказаться по теме

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования