+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Direkten Zugriff ausschliessen

  1. #1
    Neu an Board Avatar von Laie
    Registriert seit
    13.04.2006
    Ort
    Überlingen
    Beiträge
    46
    Bedankte sich
    9
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard Direkten Zugriff ausschliessen

    Ich bin dabei eine Buchungskomponente zu schreiben. Irgendwo habe ich jedoch etwas wichtiges übersehen. Es ist jederzeit möglich, mit der direkten Eingabe der Buchungsadresse im Frontend eine neue Buchung anzulegen, obwohl man noch nicht angemeldet ist. Im Backend ist der Menülink - Registered gesetzt. In jeder Datei defined('_JEXEC') or die('Restricted access'); gesetzt.
    Wo muss ich da nachschauen?
    Geändert von Laie (09.05.2010 um 00:44 Uhr)

  2. #2
    War schon öfter hier Avatar von Tribal6
    Registriert seit
    23.11.2004
    Ort
    Schweiz
    Beiträge
    243
    Bedankte sich
    3
    Erhielt 54 Danksagungen
    in 44 Beiträgen

    Standard

    Wo muss ich da nachschauen?
    ...da wo die entsprechenden Parameter ausgelesen und die Buchung getätigt wird, in deiner Komponente (Controller, View, Model.....) machst du mal das da rein (oder was ähnliches )


    PHP-Code:
    if ( JFactory::getUser()->get('guest') == '1' ) {
      
    // User ist nicht eingeloggt, redirect zum Login 
      
    $app JFactory::getApplication();
      
    // dahin wird nach dem Login redirected:
      
    $returnLink base64_encodeJRoute::_'index.php?option=com_deineKompo&view=buchung&param=' JRequest::getInt'buchungsId'false ) );
      
    // Link zum Login plus Ursprungs-URL als 'return'-Parameter
      
    $loginLink JRoute::_'index.php?option=com_user&view=login&return=' $returnLinkfalse );
      
    $msg 'Bitte erst einloggen oder registrieren!';  // JText, falls mehrsprachig
      
    $app->redirect$loginLink$msg );
    } else {
      
    // User ist eingeloggt, Buchung ist ok
       
    CODE

    (Links und Parameter natürlich anpassen.)

    Beim Schreiben einer Komponente ist das Setzen eines Menulinks auf 'registred' oder 'spezial' NIEMALS eine Absicherung gegen unerlaubten Zugriff, denn der direkte Zugriff per URL funktioniert trotzdem:
    1. ein 'ehemaliger Registrierter' hat noch die Url im Cache oder Bookmarked
    2. dieses 'Leck' ist für alle sichtbar, die den Code sehen (OpenSource....) und danach suchen...

    Cheers
    Roger

  3. Erhielt Danksagungen von:


  4. #3
    Neu an Board Avatar von Laie
    Registriert seit
    13.04.2006
    Ort
    Überlingen
    Beiträge
    46
    Bedankte sich
    9
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard

    Hallo Roger,
    da habe ich es gerade gefunden und wollte hier eine Fleißpreis... Gottfriedstutzaberauch... definitv zu langsam!

    Meine Lösung sieht jetzt so aus.
    PHP-Code:
    <?php
    /*** No direct access ***/

    defined('_JEXEC') or die('Restricted access');
    jimport('joomla.application.component.controller');

    class   
    MeinKomponentenController extends JController{

        
        function 
    display()

        {
              
    $user =& JFactory::getUser();
        
              
    // überprüfen, bevor die Seite angezeigt werden soll, ob es sich um einen registrierten Benutzer handelt.
              
    if ($user->id == 0)
              {
                
    $redirectUrl JRequest::getURI();
                
    $redirectUrl base64_encode($redirectUrl);  
                
    $joomlaLoginUrl 'index.php?option=com_user&view=login';
                
    $finalUrl $joomlaLoginUrl '&return=' $redirectUrl;
                
    $this->setRedirect($finalUrl);
          
             }else{
                
    parent::display();
             }

        }

    }
    Darf man das mit dem parent::display so machen?
    Vielen Dank,
    Marc

  5. Erhielt Danksagungen von:

    hLa

  6. #4
    War schon öfter hier Avatar von Tribal6
    Registriert seit
    23.11.2004
    Ort
    Schweiz
    Beiträge
    243
    Bedankte sich
    3
    Erhielt 54 Danksagungen
    in 44 Beiträgen

    Standard

    ...das musst du sogar, damit wird dann die entsprechende Methode der beerbten Klasse JView aufgerufen, die sich dann um das Laden des Templates kümmert, es sei denn, du überschreibst die nötigen Methoden in deiner View.

    Guckst du mal
    http://api.joomla.org/Joomla-Framewo...w.html#display

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein