PHP Archives - Technik - Blogbasis.net https://technik.blogbasis.net/tag/php Die Basis des freien Wissens – Technik Sun, 16 Nov 2014 20:39:30 +0000 de hourly 1 https://wordpress.org/?v=6.8.1 Apache MPM-ITK – Rechteaufteilung unter VHosts https://technik.blogbasis.net/apache-mpm-itk-rechteaufteilung-unter-vhosts-16-11-2014 https://technik.blogbasis.net/apache-mpm-itk-rechteaufteilung-unter-vhosts-16-11-2014#respond Sun, 16 Nov 2014 20:39:30 +0000 http://technik.blogbasis.net/?p=1262 Hallo Leute,

in diesem Blogpost möchte ich euch erzählen, wie man auf per Vhost-Basis den Apache-Webserver mit verschiedenen Benutzerrechten ausstattet. Das ist dahingehend wichtig, da man verschiedene Webseiten voneinander trennen möchte. Sollte eine Webseite gehackt werden, so kann der Angreifer nicht sofort alle anderen Webseiten mitnehmen.

Wir werden zur Lösung dieses Problems das Modul „mpm-itk“ nutzen. Dieses lässt sich leicht installieren:

sudo apt-get install apache2-mpm-itk

Es könnte sein, dass dabei „mpm-prefork“ deinstalliert wird, aber das stört nicht weiter.

Als nächstes kann man in seinen VHost-Konfigurationsdateien folgenden Eintrag hinzufügen:

  <IfModule mpm_itk_module>
    AssignUserId USER GROUP
  </IfModule>

Wobei „USER“ der zu nutzende Benutzer und „GROUP“ die zu nutzende Gruppe ist. Gibt man diese Direktive nicht an, so werden die Standardrechte von Apache genutzt. Das kann je nach Konfiguration www-data oder root sein.

Die Ordnerstruktur kann zum Beispiel so aussehen:

/var/www/ - 775 (root:root)
-----> vhost1 - 700 (user1:user1)
--------> index.php - 777 (user1:user1)
-----> vhost2 - 700 (user2:user2)
--------> index.php - 777 (user2:user2)

Nun ist jede/r Webseite/VHost in sein eigenes Verzeichnis mit seinem eigenen Benutzer eingesperrt und Übergriffe auf andere Seiten sind nicht möglich.

~ Sebastian

]]>
https://technik.blogbasis.net/apache-mpm-itk-rechteaufteilung-unter-vhosts-16-11-2014/feed 0
Symfony2 – Auf Servicecointainer im Validator zugreifen https://technik.blogbasis.net/symfony2-auf-miner-31-01-2014 https://technik.blogbasis.net/symfony2-auf-miner-31-01-2014#respond Fri, 31 Jan 2014 02:20:32 +0000 http://technik.blogbasis.net/?p=1031 In der letzten Zeit arbeite ich verstärkt mit dem Symfony2 Framework. Bei dem letzten Projekt kam es zu der Gegebenheit, dass ich aus dem einer eigenen Validatorklasse auf Parameter in der parameters.yml zugreifen musste. Das klappt aber nur mit dem Umweg über den Servicecontainer.

Die Validatorklasse

Ich nehme mal an, man schreibt sich eine eigenen Validator. Dieser besteht normalerweise aus zwei Dateien:

<?php
// src/Acme/DemoBundle/Validator/Contrainsts/UpperCase.php
namespace Acme\DemoBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class UpperCase extends Constraint
{
    public $message = 'The string "%string%" is not in uppercase format.';

    public function validatedBy()
    {
        return 'uppercasevalidator';
    }
}

Diese Klasse gibt an sich nur die Fehlermeldung aus. Auf die Funktion „validateBy()“ komme ich später zurück.

Nun brauchen wir noch den eigentlichen Validierungscode, den wir in der folgenden Datei ablegen:


<?php 
//src/Acme/DemoBundle/Validator/Contrainsts/UpperCaseValidator.php
namespace Acme\DemoBundle\Validator\Constraints; 
use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class UpperCaseValidator extends ConstraintValidator {     

    public function validate($value, Constraint $constraint)     {
         if (!$this->ctype_upper($value) && $this->container-getParameter('validator.active')) {
            $this->context->addViolation($constraint->message, array('%string%' => $value));
        }
    }

    protected $container;

    public function __construct($container){
        $this->container = $container;
    }

}

Das Beispiel ist zwar etwas doof gewählt, aber wir nehmen mal an, dass man unbedingt im Validator auf Parameter aus der „parameters.yml“ zugreifen muss.

Die Konfiguration

Nach ein wenig Recherche bin ich auf eine Lösung des Problems gestoßen, welche ich nun gerne mit euch teilen möchte.

Um zum Ziel zu gelangen, muss man in der „app/config/config.yml“ einen neuen Bereich einführen:

services:
    validator.unique.test:
        class: "Acme\DemoBundle\Validator\Constraints\UpperCaseValidator"
        arguments: [@service_container]
        tags:
            - { name: validator.constraint_validator, alias: uppercasevalidator }

Das wichtige dabei ist, dass

  • Die Pfadangabe unter „class“ keine Tippfehler enthält
  • Der „alias“-Parameter genauso heißt, wie die Rückgabe der Funktion „validateBy()“.

Ansonsten sollte der Rest des Codes soweit verständlich sein. Die Konfiguration übergibt der Validator-Klasse den Servicecontainer als Argument, und diesen fangen wir im Konstruktor auf. Danach können wir den ganz normal innerhalb des Validators nutzen.

~Sebastian

]]>
https://technik.blogbasis.net/symfony2-auf-miner-31-01-2014/feed 0