PHP Passwort Sicherheit und Hashes 2

Ich hab mal ein bisschen herumprobiert und interessante Ergebnisse bekommen: SHA-512: 0.0001068115234375 Bcrypt: 4.3771350383759 Sha1: 3.3855438232422E-5 Md5: 1.5020370483398E-5 < ?php function bcrypt_encode($password, $rounds=’12’){ $salt = substr(str_shuffle(‘./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’), 0, 22); return crypt($password, ‘$2a$’.$rounds.’$’.$salt); } function bcrypt_check($password, $stored){ return crypt($password, substr($stored, 0, 30)) == $stored; } $start = microtime(true); for($i = 0; $i < 10; $i++){ $x = hash(“sha512”, “123456”); } $end = microtime(true); echo ‘SHA-512: ‘.($end – $start).’ ‘; $start = microtime(true); for($i = 0; $i < 10; $i++){ $x = bcrypt_encode(‘123456’); } $end = microtime(true); echo ‘Bcrypt: ‘.($end – $start).’ ‘; $start = microtime(true); for($i = 0; $i < 10; $i++){ $x = sha1(“123456”); } $end = microtime(true); echo ‘Sha1: ‘.($end – $start).’ ‘; $start = microtime(true); for($i = 0; $i < 10; $i++){ $x = md5(“123456”); } $end = microtime(true); echo ‘Md5: ‘.($end – $start).’ ‘; Also wie man merkt, ist MD5 & SHA-1 wirklich auf Geschwindigkeit optimiert. Ich verwende hier abgeänderte Funktionen von hier, ohne die Einbindung der Email in den Hash. Mit 12 Iterationen bei bcrypt erreicht man schon sehr hohe Berechnungszeiten und kann dies noch natürlich steigern, allerdings ist die Frage, ab wann sich das noch lohnt. Einen Nutzer 10 Sekunden beim Login warten zu lassen ist […]

Cleanup Script für Debian

Nachdem ich ungern alles per hand mache, hab ich mir mal nen script geschrieben, dass die logfiles und den Ram-Cache leert. Dabei wird zuerst das logrotate ausgeführt und danach werden die .gz datein gelöscht.   #!/bin/bash sync echo 3 > /proc/sys/vm/drop_caches cat /dev/null > /var/log/messages cat /dev/null > /var/log/wtmp cat /dev/null > /var/log/maillog cat /dev/null > /var/log/apache2/error.log cat /dev/null > /var/log/xferlog logrotate -f /etc/logrotate.conf find /var/log/ -name ‘*.gz’ -exec rm “{}” \; find /var/log/ -name ‘*.1’ -exec rm “{}” \; find /var/log/ -name ‘*.0’ -exec rm “{}” \;

Awesome PHP Resize script

Found a awesome resize script for php today. Its straight forward and give many options. check it out at: http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/ < ?php /* * File: SimpleImage.php * Author: Simon Jarvis * Copyright: 2006 Simon Jarvis * Date: 08/11/06 * Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details: * http://www.gnu.org/licenses/gpl.html * */ class SimpleImage { var $image; var $image_type; function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if( $this->image_type == IMAGETYPE_JPEG ) { $this->image = imagecreatefromjpeg($filename); } elseif( $this->image_type == IMAGETYPE_GIF ) { $this->image = imagecreatefromgif($filename); } elseif( $this->image_type == IMAGETYPE_PNG ) { $this->image = imagecreatefrompng($filename); } } function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image,$filename,$compression); } elseif( $image_type == IMAGETYPE_GIF ) […]

Post Variablen Sichern mit PHP

Hey Um möglichen XSS und Mysql-Injection Angriffen aus dem Weg zu gehen, kann man folgendes einbauen: $r=array(); foreach($_POST as $key => $value){ $r[$key]=stripslashes(htmlspecialchars(str_replace(array(“‘”,'”‘), array(”,”),trim(strip_tags($value))))); } Man sollte ab diesen Zeitpunkt nur noch das Array $r verwenden und nicht mehr direkt auf $_POST zugreifen. Vielleicht hilfts euch.

Crypt unter Debian in Bash benutzten

Hey Nachdem ich heute auf den Fehler gestoßen bin, dass der befehl “useradd” für den parameter -p nur MD5 gecryptete passwörter nimmt musste ich mir eine methode überlegen wie ich aus einer variable in bash am besten ein passwort erstellen kann. Das ganze habe ich dann so gelöst indem ich mir ein kleines C projekt gezaubert habe: #include <iostream> /* * Autor: Kordian Bruck – http://blog.wdkk.de/ * Modified: Dominic Reich – <dr @dark-fellow.info> */ using namespace std; int main (int argc, char* argv[]){ if( argc == 2 ){ cout <<crypt( argv[1], “$1$” ) << endl; return 0; } else{ cerr << “Usage: ” << argv[0] << ” <your key to crypt here>” << endl; return -1; } } Das ganze wird dann mit dem befehl compiliert: gcc -lcrypt md5.crypt.c -o md5.crypt In dem Bash script kann dann einfach die md5.crypt mit dem passwort als argument aufgerufen werden, z.b.: password_crypt=$(/web/res/crypt/md5.crypt $password) echo Creating:$user:$password:$password_crypt Leichter gehts wohl kaum noch und besser als das ganze mit perl zu machen ist es meiner meinung nach auch. Viel Spaß

Linux User erstellen mit Mysql & BASH

Hallo Für alle die mal per Bash & Mysql User erstellen wollen hier ne kleine Stütze 😀 Die Felder username und passwort werden gelesen und anschließend wird damit ein user erzeugt. Danach setzte ich das passwort in der Datenbank zurück (ursprünglich gedacht um Benutzter für Quotas/FTP einzurichten :D) Dann das ganze noch mit einem 5 min Cronjob versehen und fertig #!/bin/bash db_user=USER db_pw=PW db_db=DATENBANK table=TABELLE i=0 dbase=`mysql -u$db_user -p$db_pw -e “use $db_db; SELECT username,passwort FROM $table WHERE passwort!=”;”` for data in $dbase ; do let i=$i+1 let mod=$i%2 if [ $mod -eq 0 ]; then password=$data fi if [ $mod -eq 1 ]; then user=$data fi if [ $mod -eq 0 ]; then if [ $i -gt 2 ]; then echo Creating:$user useradd -s /bin/false -p $password -d /home/$user $user mysql -u$db_user -p$db_pw -e “use $db_db; UPDATE $table SET passwort_ftp=null WHERE username=’$user’;” fi fi done