Tools om het web vast te leggen en te converteren

Hoe de inhoud van opnamen te beschermen?

Gecodeerde opnames

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

De eerste mogelijke verbetering is het niet langer cachen van opnames door de cachelengte op uw computer te wijzigen naar nul minuten accountpagina. Houd er echter rekening mee dat dit betekent dat de opname nog niet zo lang beschikbaar zal zijn om te downloaden en dus onmiddellijk moet worden gedownload nadat deze is gemaakt.

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

Er kan ook meer beveiliging worden toegevoegd aan PDF- of DOCX-opnamen door wachtwoord dat de documenten beschermt. 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 beschermingsniveau wilt, kunt u de resulterende opnames zelf coderen. Om dit te doen specificeert u bij elk verzoek een coderingssleutel. Deze sleutels worden niet opgeslagen door GrabzIt. Deze sleutel wordt gebruikt om de opname te coderen en de informatie te beschermen. Omdat we de sleutel niet opslaan, kunnen we je niet helpen gecodeerde opnames te herstellen. Zodra u de opname ontvangt, gebruikt u de sleutel die u eerder hebt gegenereerd om deze te decoderen.

In het onderstaande voorbeeld wordt een cryptografisch beveiligde sleutel gemaakt en naar GrabzIt verzonden, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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) Unlimited Strength 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 aangemaakt en naar GrabzIt verzonden, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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.5.2/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, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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 ontsleutelen en vereist het externe uitvoerbare bestanden of C-compilatie. Daarom hebben we deze functionaliteit niet aan onze Perl API toegevoegd. U kunt deze functionaliteit zelf toevoegen met behulp van onderstaande handleiding.

$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, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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, deze wordt vervolgens gebruikt om de opname te coderen. Deze zelfde encryptiesleutel 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 capture-encryptie van GrabzIt werkt

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

Gecodeerde opnames maken gebruik van 256-bits Advanced Encryption Standard (AES)-codering. Het maakt ook gebruik van een Cipher Block Chaining (CBC) blokcoderingsmodus.

Om ervoor te zorgen dat GrabzIt een opname versleutelt, moet een basis 64-coderingssleutel van 44 tekens lang worden doorgegeven aan het optieobject. Om deze coderingssleutel te maken, moet u 32 willekeurige cryptografisch beveiligde bytes kiezen. Deze moeten vervolgens worden gecodeerd naar basis 64. Omdat het cryptografisch veilige bytes zijn, zullen ze moeilijk te voorspellen zijn 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 decodering van de voorkant 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 opvulling aan het bestand toegevoegd, dus bij het ontsleutelen moet opvulling worden uitgeschakeld.

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