1. PHP / Говнокод #691

    +178.4

    1. 1
    defined( '_VALID_MOS' ) or die( 'Пошел на хуй отсюдова ...' );

    залез поправить шаблон и офигел, интересно как мог офигеть пользователь сайта

    Запостил: guest, 11 Марта 2009

    Комментарии (25) RSS

    • Ну вообще то нормальный пользователь сайта этого и не увидел был, если бы не полез по дирам лазить, так что как умеем так и пугаем,в меру своей образованности.Ну а вообще если не учитывать матерных слов то все зделано как по учебникам.
      Ответить
    • cheef:
      это пять))
      Ответить
    • cheef:
      Для таких случаев необходимо делать объекты типа exception, которые бы ловили все такие несанкционированные попытки доступа и централизованно редиректили на соответствующую форму. Бросьте читать учебники, где написаны решения с помощью die.
      Ответить
    • страйкер:
      [quote=cheef]
      Для таких случаев необходимо делать объекты типа exception
      [/quote]
      Думаешь в том коде вообще объекты есть? :)
      Ответить
    • xengine:
      ой, какие эксепшины
      давай еще 20 строчек не нужного кода писать в каждом файле, чтоб просто запретить прямой доступ
      поисковики там не лазят, а те кто залез пускай видят, в 99.8% это не обычный юзер
      Ответить
    • xengine:
      > делать объекты
      вот именно из-за такого рассуждения и появляются километровые классы только чтоб перевести метку времени mysql в метку времени по европейскому стандарту, вместо 2 строчек
      ей богу смешно, обьекты ))
      Ответить
    • cheef:
      без комментариев)))
      хочу посмотреть на ваши скрипты в 1000 строчек - сразу размещайте их здесь, не стесняйтесь =)
      Ответить
    • xengine:
      говнокодом в этом случае как раз будет исключение, так как оно там нафиг не нужно, это либо нужно будет юзать require ибо писать в каждом файле)) твой "объект", что в любом случае уже говнокод и копипаст MVC архитектуре + еще ни о каком KISS принципе не может идти речи, к скрипту нет доступа прямого, все запросы идут через главный контроллер, нехрен по дирам лазить _куцхацкеры_, остальные скрипты подгружаются фабрикой
      вот лучше вместо того чтобы тролить написал бы пример твоего чудо объекта и сразу бы объяснил как ты его будешь грузить в скрипт, если это require сразу и выкладывай сюда, посмеемся вместе))
      Ответить
    • Дмитрий:
      Joomla 1.x
      работал немного, сразу переменные в глаза бросаются =)
      Ответить
    • cheef:
      2xengin
      Вы сами то читали, что написали?

      В данном случае речь идёт об (программном) асбстрагировании метода показа ошибок, с сохранением пользовательской юзабилити в тоже время. В качестве реализации я предложил выделить объект - и это прекрасно работает. Но использование die в любом случае - плохой стиль.
      Ответить
    • xengine:
      2cheef
      Я прекрасно понимаю что пишу))
      Это вы видимо не совсем понимаете в каком контексте этот код используется, поэтому пишите ахинею.
      В данном случае код используется правильно, так как все запросы идут через главный! index(контроллер) в корне. НО к скриптам которые подгружает фабрика не должно быть прямого доступа т.е. если пользователь обратится site.ru/module/name.php скрипт не должен исполнится поэтому вначале файла идет проверка константы _VALID_MOS которая определена только! в главном контроллере index.php в корне.
      Проще говоря весь движок работает через index.php

      Вот теперь объясните мне как вы запретите доступ к файлу site.ru/module/name.php ? Вам придется использовать require чтобы подключить обработчик запросов, либо копипастить код в каждый файл либо вынести каталог за дерево которое доступно из веб.
      вариант 1,2 - в этом контексте уже говнокод
      вариант 3 - не всегда доступен
      Ответить
    • xengine:
      2cheef
      ну так наведите пример, неординарного решения :) быть может его начнут использовать
      Чтобы когда я к примеру обратился по адресу site.ru/module/name.php т.е. к файлу он не исполнился и в тоже время чтобы не копипастить и не инклудить код в каждый файл.
      Ответить
    • cheef:
      Это скриптоложество, вот такое безобразие - site.ru/module/name.php

      Точка доступа должна быть одна, и, кроме того, расположена в document root, в отличие от других скриптов, которые лежат вне её.

      Все полезные запросы проходят через скрипт index.php, в котором инициализируется диспатчер, и распознаётся вызываемый урл. В соответствии ему инициализируется нужный контроллер и вызывается его метод.

      Объект Exception досрочно завершает работу контроллера,вызывая установленный метод главного контроллера.. Это так сложно?

      P.S. я не стану не правее если меня и дальше минусовть
      Ответить
    • недоТролль:
      2xengine,

      Мне кажется, упоминание MVC совместно с "site.ru/module/name.php" - это кощунство.

      идею фронтконтроллера вы вроде как объяснили, только не назвали. Фронтконтроллер грузит все объекты, есть autoload, в zf некоторые используют require_once. вот вы и подгрузили все объекты (а не в каждом файле)

      с джумлой я дела не имел, но мне почему-то не кажется она супер совершенной системой. к тому же цмс

      посмотрите на нормальные фреймворки, тот же symfony - есть там эксепшены. и в cakephp, и codeigniter, и в kohana
      Ответить
    • недоТролль:
      например http://govnokod.ru/741#comment2066
      Ответить
    • xengine:
      2недоТролль
      Я с symfony работаю)) и с CodeIgniter тоже)) достаточно давно)) но это ведь не мешает мне знать строения других систем? :) и как раз в CI используется проверка константы, если вы не в курсе)) то в каждом файле есть if ( ! defined('BASEPATH')) exit('No direct script access allowed');
      Потому что папка system иногда лежит в публичном доступе.
      Symfony рассчитан на VPS и даже в офф документации написано что папки со скриптами должны лежать за! деревом, а из паблика только главный контроллер доступен и все!
      Тут речь совсем не об этом читайте комментарии лучше.

      2cheef
      Зачем вы мне строение рассказываете autoload-ов и т.д., если вам задал обычный вопрос совсем о другом?
      - Есть к примеру шаблон который должен подгрузиться только через обработчик шаблона, и он лежит в папке public_html/template/menu.php
      Вот придет _кулхацкер_ он не будет набирать site.ru/index.php?tratata=tratata а с ходу начнет лазит по дирам и открывать ваши скрипты site.ru/template/menu.php site.ru/template/header.php
      и они будут исполняться если нет никакого блокиратора.
      > Объект Exception досрочно завершает работу контроллера,вызывая установленный метод главного контроллера<
      и опять эта ахинея, вы можете понять что ваш кон
      Ответить
    • xengine:
      *вы можете понять что ваш контроллер даже не исполниться так как он даже вызван не будет))
      Тут ООП не повсеместно используется это старая Joomla!
      Вы сначала скачайте посмотрите версию 1.0.x тогда будете писать о каких то эксепшинах, и нужны ли они там вообще.

      > P.S. я не стану не правее если меня и дальше минусовть<
      Минисую не я, да и вообще если бы это было настолько важно, можно и скрипт написать и запустить из tor-a, только кому это надо;)
      Ответить
    • cheef:
      Причём тут Joomla? =)
      Я вам пишу как это делается по-людски, а вы мне пишете, что Joomla так не умеет. Лично я обсуждаю представленный кусок php кода, а вы? =)
      Ответить
    • xengine:
      Я тоже обсуждаю этот кусок кода, только я на него смотрю как использованный именно! в этом контексте.
      Т.е. запрет на прямой доступ к файлу если к нему обратиться напрямую, не через контроллеры типа site.ru/index.php?mod=menu, а напрямую site.ru/template/menu.php
      Вот я уже 3 раз задаю вопрос а вы мне так и не ответили, как вы будете запрещать прямой доступ к файлу? Учитывая что все скрипты лежат в паблик директории а не за деревом хоста.
      Ответить
    • Прямой доступ к файлу запрещается с помощью .htaccess. Если конечно скрипты обрабатываются через Apache.
      Ответить
    • недоТролль:
      2 xengine
      то, что все скрипты лежат в паблик директори - это проблема как раз таки джумлы. и всё. они не должны там лежать, так что это замечание не относится к обсуждаемому куску кода
      Ответить
    • xengine:
      > Прямой доступ к файлу запрещается с помощью .htaccess
      ну .. ну .. понадейся на хостера а потом без штанов ходи, особенно если это совдеповский хостер .. уж больно у нас любят ведение бизнеса по типу "если какие то проблемы лучше на дно уйти, а наши обязательства пускай клиенты сами решают"
      я к тому что были прецеденты в похожей ситуации, поэтому я говорю что о секьюрити нужно думать в первую очередь разработчику

      > это проблема как раз таки джумлы
      согласен, но речь не об этом
      я считаю что данное определение !не говкод! как заявил cheff со своим "обьектом" ))

      ладно, тема себя исчерпала ... уходя, ухожу
      Ответить
    • Прямой доступ к файлу запрещается просто:
      <?php
      if ( realpath($_SERVER['SCRIPT_FILENAME']) == realpath(__FILE__) ) 
      {
         header('Location: http://govnokod.ru/'); 
      }  
      # ...
      ?>

      без лишних иклюдов, ебатни и москоёпства.
      И чё было огород городить?
      Ответить
    • [quote=Говногость]
      <?php
      if ( realpath($_SERVER['SCRIPT_FILENAME']) == realpath(__FILE__) ) 
      {
         header('Location: http://govnokod.ru/'); 
      }  
      # ...
      ?>

      [/quote]

      а где exit или die после header()
      Ответить
    • [qoute=#24 Говногость]а где exit или die после header()[/quote]
      Ну звиняйте, забыл написать, но суть не в этом, я хотел показать как проще всего определить обращаются к файлу напрямую, или через инклюд, а что вставлять между {} die header exit exception etc. это уже личное дело каждого;)
      Ответить

    Добавить комментарий