sql >> Database >  >> RDS >> Mysql

Sla gevoelige gegevens op in Silverstripe 3.1

Wat je zou kunnen doen is een Password . aanmaken DataObject met het Member object dat een één-op-veel relatie heeft met het Password object. U kunt de salt van het ingelogde lid gebruiken met een 2-weg php-coderingsfunctie om een ​​wachtwoord te coderen en te decoderen.

Deze voorbeeldcode gebruikt php mcrypt met het lidzout om het wachtwoord te coderen en te decoderen.

De wachtwoordklasse heeft een beschrijving, een url, gebruikersnaam en wachtwoord. Het bevat een functie om een ​​gegeven string te versleutelen met een bepaalde sleutel. Het bevat ook een decoderingsfunctie om het opgeslagen wachtwoord te decoderen met behulp van het aangesloten lidzout.

Wachtwoordklasse

<?php
class Password extends DataObject
{
    static $db = array (
        'Description' => 'Text', 
        'URL' => 'Text', 
        'Username' => 'Text', 
        'Password' => 'Text'
    );

    static $has_one = array (
        'Member' => 'Member'
    );

    public function decryptedPassword() {
        return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($this->Member()->Salt), base64_decode($this->Password), MCRYPT_MODE_CBC, md5(md5($this->Member()->Salt))), "\0");
    }

    public function encryptPassword($key, $password) {
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $password, MCRYPT_MODE_CBC, md5(md5($key))));
    }

}

We moeten het Member-object uitbreiden om een ​​has_many-relatie te hebben met het Password-object:

MemberPasswordListExtension

<?php
class MemberPasswordListExtension extends DataExtension {

    private static $has_many = array(
        'Passwords' => 'Password'
    );
}

Dit is nodig in uw configuratie om de extensie toe te voegen:

_config.php

...
Member::add_extension('Member', 'MemberPasswordListExtension');
...

Het volgende is een formulier om een ​​wachtwoord toe te voegen. Bij indiening versleutelen we het wachtwoord met behulp van het lidzout en de versleutelingsfunctie van de wachtwoordklasse.

Page_Controller

...

public function AddPasswordForm() {
    // Create fields
    $fields = new FieldList(
        new TextField('Description'),
        new TextField('URL'),
        new TextField('Username'),
        new TextField('Password')
    );

    // Create actions
    $actions = new FieldList(
        new FormAction('AddPassword', 'Submit')
    );

    return new Form($this, 'AddPasswordForm', $fields, $actions);
}

public function AddPassword($data, $form) {
    if($member = Member::currentUser()) {
        $password = new Password();
        $form->saveInto($password);
        $password->MemberID = $member->ID;
        $password->Password = $password->encryptPassword($member->Salt, $password->Password);
        $password->write();
    }
    return $this->redirectBack();
}

...

In de paginasjabloon noemen we het formulier en doorlopen we de wachtwoorden die onder deze gebruiker zijn opgeslagen. We tonen de gebruikersnaam, het versleutelde wachtwoord en het ontsleutelde wachtwoord, om ons te laten zien dat dit heeft gewerkt:

Page.ss-sjabloon

...

<% if $CurrentMember %>
$AddPasswordForm
<% end_if %>

<% with $CurrentMember %>
<h3>Passwords</h3>
<% if $Passwords %>
<ul>
<% loop $Passwords %>
    <li>$Username $Password $DecryptedPassword</li>
<% end_loop %>
</ul>
<% else %>
<p>No passwords saved</p>
<% end_if %>
<% end_with %>

...

Dit zou u een basis moeten geven voor wat u wilt doen, en u zou het moeten kunnen aanpassen aan uw behoeften.

De coderingsmethode is overgenomen van dit stackoverflow-antwoord:Eenvoudigst tweerichtingsversleuteling met PHP

U kunt de rest van deze code gemakkelijk vervangen door een andere codeer-/decodeermethode, zoals u wenst.



  1. Zelfvoorziening van gebruikersaccounts in PostgreSQL via onbevoegde anonieme toegang

  2. Is het mogelijk om een ​​MySQL-opgeslagen procedure aan te roepen vanuit Ruby?

  3. Hoe MySQL-databases en tabellen te repareren

  4. Hoe converteer ik een kolom direct naar ASCII zonder op te slaan om te controleren op overeenkomsten met een externe ASCII-tekenreeks?