Tools om het web vast te leggen en te converteren

Hoe de inhoud van opnamen te beschermen?

Gecodeerde vastleggingen

In het tijdperk van wetten zoals de Algemene Verordening Gegevensbescherming of GDPR is het beschermen van gebruikersinformatie belangrijker dan ooit. Wanneer een opname wordt gemaakt, wordt deze korte tijd in de cache op onze servers opgeslagen om te kunnen worden gedownload. Hoewel onze servers veilig zijn en we niet de opnames van een gebruiker inspecteren zonder toestemming. Dit is niet voldoende bescherming in sommige scenario's bij het omgaan met persoonlijke informatie.

De eerste mogelijke verbetering is om niet langer cache-opnames te maken door de cachelengte te wijzigen in nul minuten op uw accountpagina. Dit betekent echter dat de opname niet erg lang beschikbaar zal zijn om te downloaden, dus moet deze onmiddellijk worden gedownload nadat deze is gemaakt.

Een ander mogelijk beveiligingsprobleem is het feitelijke verzendproces van de gevoelige gegevens naar ons. Om deze gegevens te beveiligen, moet u eerst SSL inschakelen, zodra we de gegevens hebben ontvangen en verwerkt, wat vrij snel gebeurt, worden ze automatisch uit ons systeem verwijderd om ervoor te zorgen dat er geen inbreuk op de beveiliging is.

Meer beveiliging kan ook worden toegevoegd aan PDF- of DOCX-opnames door wachtwoordbeveiliging van de documenten. Dit zorgt ervoor dat alleen gebruikers met het juiste wachtwoord toegang hebben tot een beveiligd bestand.

Als u echter zeer gevoelige informatie vastlegt, zoals ziekenhuisgegevens, enz. En een extra beveiligingsniveau wilt, kunt u de resulterende opnamen zelf coderen. Hiertoe geeft u bij elke aanvraag een coderingssleutel op, deze sleutels worden niet opgeslagen door GrabzIt. Deze sleutel wordt gebruikt om de opname te coderen die de informatie beschermt. Omdat we de sleutel niet opslaan, kunnen we u niet helpen bij het herstellen van gecodeerde opnamen. Nadat u de opname hebt ontvangen, gebruikt u de eerder gegenereerde sleutel om de opname te decoderen.

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

GrabzItClient grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
grabzIt.UseSSL(true);

string encryptionKey = grabzIt.CreateEncryptionKey();

ImageOptions options = new ImageOptions();
options.EncryptionKey = encryptionKey;

grabzIt.URLToImage("http://www.spacex.com", options);
GrabzItFile encryptedCapture = grabzIt.SaveTo();

GrabzItFile decryptedCapture = grabzIt.Decrypt(encryptedCapture, encryptionKey);

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

Om gecodeerde opnames te gebruiken met Java 6, 7 en 8 installeert u de Java Cryptography Extension (JCE) Onbeperkte sterkte Jurisdiction Policy Files into alle / jre / lib / security / mappen van de Java-installatiemappen.

GrabzItClient grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
grabzIt.UseSSL(true);

String encryptionKey = grabzIt.CreateEncryptionKey();

ImageOptions options = new ImageOptions();
options.setEncryptionKey(encryptionKey);

grabzIt.URLToImage("http://www.spacex.com", options);
GrabzItFile encryptedCapture = grabzIt.SaveTo();

GrabzItFile decryptedCapture = grabzIt.Decrypt(encryptedCapture, encryptionKey);

In het onderstaande voorbeeld wordt automatisch een cryptografisch beveiligde sleutel gemaakt en verzonden naar GrabzIt, deze wordt vervolgens gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat automatisch te decoderen door true door te geven aan de DataURI-methode, die vervolgens kan worden gelezen in de callback-methode.

<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@grabzit/js@3.4.7/grabzit.min.js"></script>
</head>
<body>
<img id="capture"></img>
function callback(dataUri)
{
    document.getElementById('capture').src = dataUri;
}
<script type="text/javascript">
GrabzIt("Sign in to view your Application Key").UseSSL().Encrypt().ConvertURL("http://www.spacex.com").DataURI(callback, true);
</script>
</body>
</html>

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

var grabzit = require('grabzit');

var client = new grabzit("Sign in to view your Application Key", "Sign in to view your Application Secret");
client.use_ssl(true);

var encryptionKey = client.create_encryption_key();

client.url_to_image("http://www.spacex.com", {"encryptionKey":encryptionKey});
client.save_to(null, function (error, result){
    if (error != null){
        throw error;
    }
    var decryptedBytes = client.decrypt(result, encryptionKey);
}); 	

Helaas kan Perl de AES-codering niet native decoderen en heeft het externe uitvoerbare bestanden of C-compilatie nodig. Daarom hebben we deze functionaliteit niet toegevoegd aan onze Perl API. In plaats daarvan kunt u deze functionaliteit zelf toevoegen met behulp van de onderstaande gids.

$grabzIt = GrabzItClient->new("Sign in to view your Application Key", "Sign in to view your Application Secret");
$grabzIt->UseSSL(1);

$options = GrabzItImageOptions->new();
$options->encryptionKey("UUK2Xo9OLT2dFvN0wPBGOMZRYqD6WxqFtrZK9YrG+Hg=");
$grabzIt->URLToImage("http://www.spacex.com", $options);
//needs to be decrypted
$data = $grabzIt->SaveTo();

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

$grabzIt = new \GrabzIt\GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
$grabzIt->UseSSL(true);

$encryptionKey = $grabzIt->CreateEncryptionKey();

$options = new \GrabzIt\GrabzItImageOptions();
$options->setEncryptionKey($encryptionKey);

$grabzIt->URLToImage("http://www.spacex.com", $options);
$encryptedData = $grabzIt->SaveTo();

$decryptedData = $grabzIt->Decrypt($encryptedData, $encryptionKey);

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

grabzIt = GrabzItClient.GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret")
grabzIt.UseSSL(True)

encryptionKey = grabzIt.CreateEncryptionKey()

options = GrabzItImageOptions.GrabzItImageOptions()
options.encryptionKey = encryptionKey

grabzIt.URLToImage("http://www.spacex.com", options)
encryptedData = grabzIt.SaveTo()

decryptedData = grabzIt.Decrypt(encryptedData, encryptionKey)

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, die vervolgens wordt gebruikt om de opname te coderen. Dezelfde coderingssleutel wordt vervolgens gebruikt om het resultaat te decoderen.

grabzIt = GrabzIt::Client.new("Sign in to view your Application Key", "Sign in to view your Application Secret")
grabzIt.use_ssl(true)

encryptionKey = grabzIt.create_encryption_key()

options = GrabzIt::ImageOptions.new()
options.encryptionKey = encryptionKey

grabzIt.url_to_image("http://www.spacex.com", options)
encryptedData = grabzIt.save_to()

decryptedData = grabzIt.decrypt(encryptedData, encryptionKey)

Hoe de codering van GrabzIt werkt

Deze handleiding is zeer technisch en is bedoeld om ontwikkelaars te helpen begrijpen hoe onze codering werkt. Het moet met name nuttig zijn voor Perl-ontwikkelaars, omdat de taal geen open source Perl-pakket heeft dat geen voltooiing of installatie van tools van derden zoals Open SSL vereist.

Gecodeerde opnamen maken gebruik van 256 bit Advanced Encryption Standard (AES) -versleuteling. Het gebruikt ook een Cipher Block Chaining (CBC) -blokcodeermodus.

Voor GrabzIt om een ​​opname te coderen, moet een basis 64-coderingssleutel die 44-tekens lang zijn, worden doorgegeven aan het optieobject. Om deze coderingssleutel te maken, moet u 32 willekeurige cryptografisch beveiligde bytes kiezen. Deze moeten dan worden gecodeerd om 64 te baseren. Omdat ze cryptografisch veilige bytes zijn, zijn ze moeilijk te voorspellen en daarom moeilijker te kraken.

Wanneer GrabzIt een opnameverzoek ontvangt met een coderingssleutel, wordt de opname gecodeerd en wordt de initialisatievector (IV) aan het begin van het bestand ingevoegd. Deze IV is 16 bytes lang en moet vóór de ontsleuteling van het bestand worden verwijderd. De IV moet ook worden doorgegeven aan het AES-algoritme om decodering mogelijk te maken. Wanneer een opname gecodeerd is, wordt er geen padding aan het bestand toegevoegd, dus bij het decoderen moet padding worden uitgeschakeld.

Onthoud dat als u een verbetering voor een van onze bestaande client-API's hebt gemaakt of voor een geheel nieuwe taal, u deze kunt delen met de gemeenschap via GitHub.