Sinds vandaag, 14 februari 2016, biedt Antagonist SSH ondersteuning voor hun webhosting pakketten. Dit heeft erg veel voordelen; Zoals ondersteuning voor Git. Wat weer handig is als je Composer wil gebruiken. Je kan hierdoor makkelijk frameworks als Laravel en Symfony installeren zonder tientallen vendor packages te moeten uploaden via FTP.

Composer downloaden en installeren

Om dit bericht niet te lang te maken ga ik er van uit dat je een SSH verbinding hebt met de omgeving. Als je dit niet hebt, kun je hier lezen hoe je SSH instelt bij Antagonist.

ssh verbinding met Antagonist

Om composer te downloaden gebruik je het commando wget https://getcomposer.org/installer -O composer-installer Dit download de composer installeren naar het bestand composer-installer.

Composer downloaden bij Antagonist webhosting

Composer downloaden

Gebruik nu het commando php composer-installer om composer te installeren. Je krijgt nu de melding dat Composer is geïnstalleerd.

composer installeren

Composer installeren

Om composer te gebruiken kan je nu php composer.phar gebruiken.

Composer globaal installeren

Om ervoor te zorgen dat je composer kan aanspreken vanuit elke map en niet altijd php /home/klant123/composer.phar (vervang klant123 door je DirectAdmin gebruikersnaam) hoeft te gebruiken, gaan we composer naar de bin map verplaatsen.

Het probleem is, de /usr/bin en /usr/local/bin mappen zijn van de gebruiker root en dus niet schrijfbaar voor ons, de klant. Gelukkig is er een simpele oplossing. We maken in onze home directory een map bin aan. Je vindt de map in /home/klantnummer123. Maak hier de map bin aan met het commando mkdir bin. We hebben nu een bin map!

Inhoud van de home directory

Inhoud van de home directory

Verplaats vervolgens composer.phar met het commando mv composer.phar bin/composer.

 

Composer gebruiken

Als je nu composer <enter> intypt kan je composer gebruiken.

Composer gebruiken bij Antagonist

Een vendor package installeren met Composer.

 

 

 

 

 

 

 

 

 

proc_get_status() has been disabled for security reasons

Als je de foutmelding proc_get_status() has been disabled for security reasons krijgt tijdens het installeren van een package is dat eenvoudig op te lossen.

Je moet eerst bij Antagonist inloggen om vervolgens naar Select PHP version te gaan.

PHP versie kiezen

 

 

 

 

 

Druk op de knop Show PHP settings.

php-settings

 

 

 

 

 

 

 

 

Bewerk de optie disable_functions en haal het stukje proc_get_status, weg. Druk op nu op Apply en daarna onderaan de pagina op save. Je kan vanaf nu composer gebruiken zonder foutmeldingen!

disable_functions bewerken antagonist

ASP.NET Logo

ASP.NET MembershipProvider

Als je ASP.NET, verder ASP, gebruikt kan je gebruik maken van de ASP.NET MembershipProvider. Door de MembershipProvider te gebruiken kan je bijvoorbeeld wachtwoorden hashen. Dit zorgt ervoor dat wachtwoorden niet meer terug te halen zijn, in tegenstelling tot hashing.

Aan de hand van een voorbeeld laat ik zien hoe je in PHP dezelfde hashes kan genereren. Dit kan handig zijn als je vanuit PHP met de gebruiker van een ASP applicatie wil werken. We gaan uit van de standaard hashing methode in ASP.

Hashing algoritme

Het hashen van een wachtwoord met de MembershipProvider wordt standaard gedaan met de volgende code:

public string EncodePassword(string pass, string salt)
{
    byte[] bytes = Encoding.Unicode.GetBytes(pass);
    byte[] src = Encoding.Unicode.GetBytes(salt);
    byte[] dst = new byte[src.Length + bytes.Length];
    Buffer.BlockCopy(src, 0, dst, 0, src.Length);
    Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
    HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
    byte[] inArray = algorithm.ComputeHash(dst);
    return Convert.ToBase64String(inArray);
}

De methode EncodePassword verwacht een wachtwoord als string en een salt, ook als string. De salt wordt bij het maken van een gebruiker automatisch gegenereerd en opgeslagen in een losse database kolom. De salt wordt ook gebruikt om de uiteindelijke hash te genereren.

Een wachtwoord hash en salt kunnen er bijvoorbeeld zo uit zien:

Wachtwoord: 6Ou2HJQuSEHxLbsSMZgeTpHuj90=
Salt: B+LGKhw2EQRs6oGyntFv8g==

Let op: het wordt opgeslagen als base64.

PHP voorbeeld

Om in PHP wachtwoorden te hashen, om ze bijvoorbeeld te vergelijken met een wachtwoord uit een ASP applicatie gebruiken we de volgende code:

public static function asp_hash($password, $salt = '')
{
    $pass = utf8_encode($password);
    $salt = base64_decode($salt);
    $pass = mb_convert_encoding($pass, 'UTF-16LE', 'UTF-8');
    
    return base64_encode(sha1($salt.$pass, true));
}

De functie verwacht een wachtwoord en salt als string; een lege salt kan ook voorkomen, dit maakt verder niet uit als er bij het maken van het wachtwoord ook geen salt is gebruikt.
Als eerste wordt het wachtwoord omgezet naar utf8, vervolgens gebruiken we base64_decode om de echte salt op te slaan in $salt. Daarna zetten we het wachtwoord om naar UTF-16LE door middel van de mb_convert_encoding() functie. Ten slotte maken we een sha1 hash van de salt + wachtwoord die we als base64 teruggeven.

Vervolgens zetten we het wachtwoord weer om naar een base64 string en geven het het terug.

Om vanuit PHP te controleren of een wachtwoord overeenkomt met wat er in de ASP applicatie wordt gebruikt kan je de volgende code gebruiken:

$pass = 'wachtwoord'; // het wachtwoord dat vergeleken moet worden, gebruik bijv. $_POST['wachtwoord'];
$salt = 'salt123'; // de hash uit de asp applicatie
$aspHash = '6kwU7ShuWDrGKy5vOvnWvWrTLUk=='; // de hash uit de asp applicatie

return $aspHash == self::asp_hash($pass, $salt); // geef een true/false terug als het wachtwoord wat een gebruik invult overeenkomt met de asp variant.

Bedankt voor het lezen, vragen en opmerkingen kunnen altijd als commentaar worden geplaatst.PHP - ASP.NET MembershipProvider hashing

Van de tafel naar de grond

Het kan gebeuren, u kijkt even niet goed uit en struikelt zo over de kabel van uw externe harde schijf met alle vakantie foto’s erop. Een soortgelijk iets is een bekende van mij helaas ook overkomen. De harde schijf viel terwijl deze nog aanstond van de tafel zo op de vloer.

Kapot

Nadat de schijf gevallen is werd deze meteen weer aangesloten in de hoop dat alles nog heel zou zijn; dit bleek helaas niet het geval. Als dit bij u ook het geval koppel hem meteen weer los en probeer zelf niet iets te herstellen of de schijf te formatteren, dit kan vaak grote gevolgen hebben voor het herstellen van de schijf. Laat er iemand naar kijken die hier verstand van heeft of lees dit artikel grondig door en bekijk dan of u dit zelf wil gaan doen.

Wat nu

Als een externe harde schijf valt terwijl deze aanstaat kan het gebeuren dat het bestandssysteem beschadigd omdat de stroom uitvalt.

Een bestandssysteem is een door het besturingssysteem verzorgde, softwarematige indeling van een opslagmedium (zoals een harde schijf). Het besturingssysteem (bijvoorbeeld van de computer of smartphone) gebruikt deze indeling om toegang tot een opslagmedium te verzorgen voor applicaties en zijn eigen gebruik, zodat data in de vorm van bestanden op het opslagmedium weggeschreven kan worden en ook weer teruggelezen.

via Wikipedia

In het kort: het bestandssysteem is plattegrond voor de computer om te begrijpen waar bepaalde data zich bevindt. Zonder deze plattegrond raakt de computer de weg kwijt en kunnen u en de computer er niets meer mee, toch?

USB, SATA en MFT

Ik heb de externe schijf mee naar huis genomen en aangesloten. De computer gaf de melding dat het station niet toegankelijk is en dat het mogelijk beschadigd is. De schijf heeft volgens Windows nu een “RAW” bestandssysteem (in dit geval hoorde dit NTFS te zijn). Een door Windows niet herkend bestandssysteem.

Dit wil niet altijd zeggen dat het bestandssysteem is verandert. Het kan bijvoorbeeld zijn dat

  • de USB aansluiting kapot is
  • de interne USB naar SATA verbinding kapot is
  • de MFT/het bestandssysteem beschadigd is
Serial ATA aansluiting

Een harde schijf met SATA aansluiting.

USB naar SATA is een printplaat met daarop de USB aansluiting die wordt omgezet naar SATA. SATA is een type aansluiting die we voor het gemak als een soort andere USB aansluiting zien.

MFT staat voor master file table.

De Master File Table (MFT) bevat hoofdzakelijk metadata over elk bestand en elke map op een NTFSbestandssysteem. Het bevat gegevens zoals de plaats, de grootte en de machtigingen.

via Wikipedia

In mijn geval is het bestandssysteem beschadigd en de aansluiting kapot.

De redding is nabij

Het positieve is, de schijf zelf is niet fysiek beschadigd. Het slechte nieuws, omdat het bestandssysteem beschadigd is kunnen Windows en Linux niets meer met de schijf behalve deze compleet wissen, en dat willen we niet.

Ik heb de externe harde schijf opengemaakt met de hulp van deze video: YouTube. Ik was opzoek naar schroeven maar het bleek net iets anders te werken. Toen de schijf eenmaal uit elkaar was heb ik deze aangesloten op mijn computer via de zogenaamde SATA aansluiting.

De oplossing: Testdisk/Photorec

photorec foto's terughalen

Photorec in actie

Nu zijn we bij het punt waar ik de foto’s moet proberen terug te halen. Ik heb wel eens gewerkt met Windows programma’s om verloren bestanden terug te halen maar aangezien het bestandssysteem beschadigd is heb ik ervoor gekozen om het op een andere manier te doen. Namelijk met Testdisk/Photorec.

Testdisk en Photorec zijn 2 programma’s die je kunnen helpen bij het herstellen van een schijf of het terughalen van data. Om deze programma’s te gebruiken verwijs ik naar de handleiding van Photorec zelf(Engels). Even voor de duidelijkheid: Photorec is voor het herstellen van bestanden van kapotte schijven e.d. en Testdisk voor het herstellen van de schijf zelf. Wat in dit geval te riskant is omdat je dan mogelijk meer schade aanricht.

Succes!

Ik heb ervoor gekozen om Photorec vanaf een USB stick uit te voeren (Linux distributie: Kali Linux, in forensic mode) maar dit kan ook gewoon binnen Windows. In Photorec heb ik eerst geprobeerd om bestanden terug te halen met de recover functie, dit werkte helaas niet door het beschadigde bestandssysteem. Het repareren hiervan lukte ook niet. Toen heb ik gekozen voor de Search optie (dit scant de hele schijf onder het bestandssysteem) en deze kon de foto’s gelukkig terughalen. Na 10(!!) hele uren is het proces bijna klaar en heb ik al meer dan 6300 foto’s teruggehaald naar mijn eigen externe schijf.