Manchmal wird man einfach nicht schlau aus den Post die im Internet zum Thema PHP Session Sicherheit gemacht werden.
Dabei kann es so einfach sein, mit wenigen Mitteln, einigermaßen Sicherheit zu bekommen.
Welche Gefahren bestehen den wenn man SESSIONs benutzt?
Nunja, alle SESSION Daten des Users können geklaut werden. Was bringt dem Angreifer das?
Ein wirklich gute Frage.
Eine Session sollte(!) keine Passwörter enthalten -> können nicht gestohlen werden.
Eine Session sollte nur Daten beinhalten die für den Angreifer eigentlich uninteressant sind, niemals sensible Daten.

Aber der Angreifer kann die SESSION auch fortsetzen, das ist wohl das eigentliche Problem, das heißt Userdaten können manipuliert werden, ungewollte Einkäufe getätigt oder – wenns richtig dumm läuft die vorgespeicherten Kreditkartendaten ausgelesen werden.
Wie kann man dem also vorbeugen:

____________________________________________________

English:

This Post contains a few tips to make easy PHP SESSION secure. Sometime you only find confusing Post, so I decide to make a very small list…

____________________________________________________

____________________________________________________
Ein gutes, einfaches und sehr schlichtes Mittel ist:

(Just a easy and simple solution)

1)
session_start();
session_regenerate_id(TRUE);

Die SESSION id wird gleich geändert beim Start, der Angreifer hat nicht viel Zeit darauf zu reagieren. Nachteil, der Refreshbutton schmeißt auch eure normalen User aus der SESSION.

(The Session id will change at the begin. The attacker has no mutch time to handle it. The only bad thing is that the refreshbutton will kick out the normale user too.)

_____________________________________________________
2. Ein zweiter hilfreicher „Trick“ ist wohl das benutzen von:
(second trick)

if(empty($_SESSION['Uni_K']))
{
$_SESSION = array();//nicht das das was unerwünschtes mitkommt
$_SESSION['Uni_K'] = uniqid();
}
if(empty($_REQUEST['Uni_K']))
{
Hier wird zum erstenmal zugegriffen, Herkunft unbekannt
}elseif($_REQUEST['Uni'] !== $_SESSION['Uni_K'])
{
// vorsicht nicht erlaubt
}else
{
//jetzt kanns losgehn
}

Danach(After):
output_add_rewrite_var ('Uni',$_SESSION['Uni_K']);

Was hier bedacht wurde: das $_REQUEST Problem,
denn REQUEST enthällt ebenfalls Cookiedaten.
Der Angreifer müsste also die Session stehlen und dann ein Cookie erzeugen der diesen REQUEST übernimmt, es ist daher anzuraten den SESSION Key von dem REQUEST key zu unterscheiden und einen anderen Namen zu geben, das macht es dem Angreifer eigentlich unmöglich den richtigen $_REQUEST Key zu finden (außer bei opensource 😉 )

(The thoughts about the $_REQUEST Problem just bring me to this solution: the keys are just differ. With this solution its easy to make your Session a bit saver)
__________________________________________________
3)
Zudem könnte man für eine SESSION einen SESSION_SANITY_KEY bilden aus $_SERVERinformationen
(You can use a SESSION_SANITY_KEY, too. You can build it with $_SERVER informations)

__________________________________________________
4) Für Programmierer die es noch sicher brauchen empfehle ich den
Save_handler den php bereitstellt.

– For more securty you can use the php included Save Handler

Eine Quelle phpforum

Advertisements

php sicherheit

Februar 26, 2009

Hi,
ich bin gerade darauf gestoßen: Sicherheit
Ich denke ein sehr interesanter Vortrag und es lohnt sich auf jeden Fall ihn durchzulesen.

Nachdem ich gestern schon auf die verbindung von Ajax uns Smarty zu sprechen kam, habe ich doch glattweg n bissl im Internet gesurft, dabei ist mir ziemlich schnell DAS HIER aufgefallen. Das sieht schon sehr sehr gut aus, hoffe die Smartyentwickler haben das auch gesehn, den in den offziellen Listen scheint es nicht dabei zu sein.
Nunja,
ich musste heute ein wenig suchen, und habe wiedermal festgestellt das smarty top ist, quasi spitze 😉
Ich hatte ein schönes Array gebaut, und wollte nun nur die INT Schlüßel ausgeben lassen, weil alle anderen Schlüssel Text beinhalten,
das heißt, eine Foreach schleife, mit anschließender Prüfung auf INT Schlüssel, das ganze sieht dann so aus:


{foreach key=arr_key item=value from=$array}
{if preg_match('~^[0-9]+$~', $arr_key)}
Inhalt
{/if}
{/foreach}

Das ganze war so strukturiert das alle INT Schlüßel wieder ein Array beinhalten – nur falls sich jemand nach dem Sinn fragt.
Der Clou ist aber das der preg_match Filter ohne Probleme in smarty eingebaut werden kann, und quasi in letzter Instanz sogar als Outputfilter genutzt werden kann.
___________________________________________________
Yesterday I talked about the combination of Smarty and Ajax, and I just surf and find: THIS – very fast, but I dont find it in the offiziell lists. So I hope this version will be integrated in the new smarty version…
And today: Just normal work – but I just need – a bit of – time to find a solution for a little Problem, but its a very nice Solutions. In Smarty you can easy use preg_match, so You can easy test some varibles on type – test if they are Numeric, String etc..
In this example(up), I test the array keys – I just build an array with numeric keys and string keys – so all numeric keys had array values and all other had sting values –
but i the end, smarty enables you to use it as a last-output-filter, if you wanne 😉

Smarty Template Engine

Februar 25, 2009

Für alle PHP Programmierer die es noch nicht kennen:
Smarty
Wohl eines der bekanntesten Template Engines die es so gibt. Sie ist einfach zu handln und eigentlich immer up to Date was neue PHP Versionen angeht.
Der Grund warum ich das hier anbringe. Mir ist aufgefallen das Sie vorallem viele Anfänger immer wieder im Spagetticode verlieren und Smarty Möglichkeiten bietet diesem zumindest ansatzweise zu entgehen.
Dabei wollte ich auch darauf hinweisen das die Version 3.0 am entstehen ist und ich schon sehr gespannt bin was uns erwartet. Ich hoffe ja auf eine Engine die Ajax-Elemente integrieren kann. Wir dürfen gespannt sein.
🙂

For all PHP Programmers who dont know about it:
Smarty
I think its the most popular Template System. Its easy to handl and allways up to date with the curtain php versions.
Why I write this?
I think mostly for beginners its very difficult to get a clear code, and with this engine even beginners can handle deviding code a little bit better.
Last thing: Soon Smarty 3.0 will be released, hope in this version includes a ajax function, that would be very very nice.
we’ll se 🙂

Autofill 1.1b

Februar 24, 2009

Ich wurde vor einigen Tag von einem User darauf hingewiesen das meine Erweiterung der Klasse „Autofill“ ein paar Darstellungsfehler besitzt. Das hat mich dazu gebracht mir die Klasse nochmal genauer auszuschauen und sie ein wenig zu optimalisieren. Es ist mir vorher nicht so Recht aufgefallen, aber bisher waren einige CSS – Daten im Javascriptcode festgelegt und damit mehr Spagetti als schön getrennter Code. Also hab ich alles außer die Displayeigenschaften aus dem Javascript Code gekickt und wie es sich gehört ausgelagert.

______________________________
A few days ago a User of my Autofill Class write me Problems – Display in some Browsers. So I take a look a this Class again and notice that there where a few CSS sets in Javascript. Now, I kicked out all this CSS stuff – more or less – the display-proberty is still in. Up to now there is more Liberty to set the CSS.

Here the Link/Hier der Link

Link
Have fun!

Jaja, das Sortieren von SQL SELECT s ist schon so eine Sache vor allem wenn ein Datum ins Spiel kommt.

Ich habe mir mal den Spaß gemacht und eine „ungetesteten“ SQL Query gesucht, gefunden und umgeschrieben das er auch einigermaßen verständlich ist. Ich werde Ihn bestimmt irgendwann testen
$sqlquery="SELECT Whatever
FROM tableName
WHERE DateField BETWEEN
DATEADD(day, -7, GETDATE())
AND GETDATE()
GROUP BY DateField";

Das ist nun eine Sortierung die quasi die letzte Woche zeigen sollte,
ich bin mir nicht ganz sicher, ob man statt „day“ auch „d“
schreiben kann, sollte zumindest gehen, vielleicht fehlen auch
noch ein paar ‚ ;).

Nachtrag:
Einfacher geht das natürlich mit einer Abfrage wie sie auch mysql in der Docu hat. Die Beispiele weisen darauf hin das Sie für beliebige Zeiten erweitert werden können, da statt curtdate() natürlich auch jedes Andere Datum eingefügt werden kann, zumindest theoretisch.


SELECT something FROM tbl_name
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

Hi Guy, jeje, the SQL SELECT, its a strange thing, so,
i write a little query for you to select the Data of the last Week,
take care its untestet, maybe missing some ‚ s …… I will test later

Ich habe gestern eine kleine Klasse geschrieben mit der ich einfach – also einfach ist script.aculo.us sowieso gehalten – ich meine einfach mit PHP zu implementieren. Ein entsprechende Klasse habe ich auf phpclasses hochgeladen. Mal sehn wie lange die zur Validierung brauchen, dann folgt der Link.

Hier aber die Hauptfunktion :

public function add_inPlaceEditor($id_element, $php_file, $options)
{
$this->scripttext.=’var ‚.$id_element.‘ = new Ajax.InPlaceEditor(\“.$id_element.’\‘,\“.$php_file.’\‘,{‚;
if(is_array($options))
{
$i=0;
foreach($options as $key => $value)
{
$i++;
if($i==count($options))
{
$this->scripttext.=$key.‘:\“.$value.’\“;
}
else
{
$this->scripttext.=$key.‘:\“.$value.’\‘,‘;
}
}
}
else
{
return ‚Your set Option is not an array‘;
}
$this->scripttext.=‘} );‘;
}

Damit ist es relativ einfach neue InEditFelder zu definieren

Ich habe schon ähnliche PHP Klassen dazu gesehen, aber die meisten sind sehr sehr unübersichtlich. Falls jemand einen Link zu einem übersichtlichen hat wär ich natürlich dankbar, das Inet is schließlich groß 🙂 ….

achja Ausschnitt ist unter BSD-Lizenz…..

_________________________________________________

Hi,

Yesterday I write a little Class for scriptaculos to handle th in Place Editor with PHP. The Code you find in the first german part. The full code will be released on http://www.phpclasses.org later, after validating.

Maybe you know some other classes who handle scriptaculos, so let me know. I just write it because i dont find any ‚good‘ and understandable Version for this.