Mcrypt niet meer ondersteund in PHP 7.2 – Veilige alternatieven

Mcrypt is verleden tijd: dit is wat je nu moet doen

In 2017 komt PHP 7.2 uit en met deze nieuwe versie verdwijnt de verouderde en onveilige PHP-Mcrypt module definitief. Mcrypt wordt al enige tijd afgeraden omdat het niet meer veilig en betrouwbaar is. Toch blijkt uit enkele steekproeven dat sommige applicaties nog steeds gebruik maken van deze functies. In deze blog leggen we uit waarom je Mcrypt echt niet meer wilt gebruiken en wat de alternatieven zijn.

Wat is Mcrypt?

Mcrypt is een PHP-extensie die versleuteling van informatie mogelijk maakt. Het stelt je in staat om data veilig te verzenden. Maar Mcrypt heeft veel bugs en veiligheidsrisico's, waardoor het niet langer een betrouwbare optie is. De ontwikkeling van de libmcrypt-bibliotheek, waarop de PHP-module draait, is al sinds 2008 gestopt. Dit betekent dat bekende problemen en kwetsbaarheden niet worden opgelost. De onbetrouwbare random generator maakt het nog riskanter om Mcrypt te blijven gebruiken.

Waarom geen Mcrypt gebruiken?

Er zijn enkele belangrijke redenen om geen gebruik te maken van Mcrypt:
  1. Onveilige cryptografische functies: Het is eenvoudig om onveilige functies te gebruiken, wat de beveiliging van je applicatie in gevaar brengt.
  2. Verouderde software: De libmcrypt-bibliotheek is al sinds 2008 niet meer in ontwikkeling. Bugs en veiligheidsproblemen blijven dus onopgelost.
  3. Onbetrouwbare encryptie: De random generator is niet betrouwbaar genoeg voor veilige versleuteling.

Wat zijn de alternatieven voor Mcrypt?

Gelukkig zijn er veiligere alternatieven beschikbaar voor cryptografische functies in PHP:
  1. libsodium: Dit is de meest efficiënte en veilige methode voor versleuteling. Vanaf PHP 7.2 wordt libsodium standaard meegeleverd. Maak je gebruik van PHP 7.0 of nieuwer? Dan kun je bij ons al gebruik maken van de Libsodium PECL-extensie.
  2. Defuse PHP-Encryption: Deze wrapper voor OpenSSL maakt het moeilijk om onveilige PHP-functies te gebruiken. Als je Composer gebruikt, kun je deze zelf installeren met: composer require defuse/php-encryption.Op onze servers is deze bibliotheek standaard beschikbaar en kun je hem aanroepen met: require_once('defuse-crypto');.
  3. OpenSSL: Als je geen gebruik kunt maken van de bovenstaande opties, kun je terugvallen op de OpenSSL-functies die standaard in PHP aanwezig zijn.

De planning van Mcrypt

Vanaf PHP 7 is Mcrypt al "deprecated," wat betekent dat er bij het gebruik van deze functie een waarschuwing wordt gegenereerd in de error logs. Vanaf PHP 7.2 is Mcrypt volledig verwijderd, en als je toch probeert de functies aan te roepen, krijg je een fatale foutmelding: Fatal error: Call to undefined function mcrypt_*.

Wat moet je nu doen?

Applicaties zoals WordPress, Joomla en Magento gebruiken in de recente versies geen Mcrypt-functies meer. Je hoeft in die gevallen dus niets te veranderen. Maar als je zelf een andere PHP-applicatie hebt, raden we aan om je code te controleren. Let op de volgende functies:

mcrypt_cfb.
mcrypt_cbc.
mcrypt_create_iv.
mcrypt_decrypt.
mcrypt_ecb.
mcrypt_enc_get_algorithms_name.
mcrypt_enc_get_block_size.
mcrypt_enc_get_iv_size.
mcrypt_enc_get_key_size.
mcrypt_enc_get_modes_name.
mcrypt_enc_get_supported_key_sizes.
mcrypt_enc_is_block_algorithm_mode.
mcrypt_enc_is_block_algorithm.
mcrypt_enc_is_block_mode.
mcrypt_enc_self_test.
mcrypt_encrypt.
mcrypt_generic_deinit.
mcrypt_generic_end.
mcrypt_generic_init.
mcrypt_generic.
mcrypt_get_block_size.
mcrypt_get_cipher_name.
mcrypt_get_iv_size.
mcrypt_get_key_size.
mcrypt_list_algorithms.
mcrypt_list_modes.
mcrypt_module_close.
mcrypt_module_get_algo_block_size.
mcrypt_module_get_algo_key_size.
mcrypt_module_get_supported_key_sizes.
mcrypt_module_is_block_algorithm_mode.
mcrypt_module_is_block_algorithm.
mcrypt_module_is_block_mode.
mcrypt_module_openmcrypt_module_self_test.
mcrypt_ofb.
mdecrypt_generic.

Met de volgende shell-opdracht kun je snel code vinden die gebruik maakt van Mcrypt-functionaliteit:

lh_mcrypt_functions=(“mcrypt_encrypt” \
    “mcrypt_create_iv” \

    “mcrypt_cfb” \

    “mcrypt_cbc” \

    “mcrypt_create_iv” \

    “mcrypt_decrypt” \

    “mcrypt_ecb” \

    “mcrypt_enc_get_algorithms_name” \

    “mcrypt_enc_get_block_size” \

    “mcrypt_enc_get_iv_size” \

    “mcrypt_enc_get_key_size” \

    “mcrypt_enc_get_modes_name” \

    “mcrypt_enc_get_supported_key_sizes” \

    “mcrypt_enc_is_block_algorithm_mode” \

    “mcrypt_enc_is_block_algorithm” \

    “mcrypt_enc_is_block_mode” \

    “mcrypt_enc_self_test” \

    “mcrypt_encrypt” \

    “mcrypt_generic_deinit” \

    “mcrypt_generic_end” \

    “mcrypt_generic_init” \

    “mcrypt_generic” \

    “mcrypt_get_block_size” \

    “mcrypt_get_cipher_name” \

    “mcrypt_get_iv_size” \

    “mcrypt_get_key_size” \

    “mcrypt_list_algorithms” \

    “mcrypt_list_modes” \

    “mcrypt_module_close” \

    “mcrypt_module_get_algo_block_size” \

    “mcrypt_module_get_algo_key_size” \

    “mcrypt_module_get_supported_key_sizes” \

    “mcrypt_module_is_block_algorithm_mode” \

    “mcrypt_module_is_block_algorithm” \

    “mcrypt_module_is_block_mode” \

    “mcrypt_module_openmcrypt_module_self_test” \

    “mcrypt_ofb” \

    “mdecrypt_generic” \

)

find_lh_mcrypt_functions=$(echo ${lh_mcrypt_functions[@]}|tr ” ” “|”)

grep -Ern –include “*.php” “$find_lh_mcrypt_functions” .

    • Related Articles

    • Verlengings-e-mails van ICANN: Wat te doen

      Heb je een e-mail ontvangen van ICANN over het verlopen van je domein? Geen paniek! ICANN stuurt deze berichten naar houders van .com-domeinen als herinnering. Maar wat betekenen deze e-mails precies en wat moet je doen? We leggen het je hier uit. ...
    • Bescherm je website tegen Clickjacking

      Een tijd terug ontvingen we een melding via ons security bounty programma. Een oplettende deelnemer had ontdekt dat onze website gevoelig was voor clickjacking. Clickjacking is een techniek waarbij kwaadwillenden gebruikers ongemerkt laten klikken op ...
    • Het 404 Gevoel – Wat Te Doen

      We kennen het allemaal: je klikt op een link en krijgt ineens een 404-pagina te zien – "Page not found". Dit betekent simpelweg dat de pagina die je zocht niet (meer) bestaat. Heel frustrerend, vooral als je net die ene interessante link zag en meer ...
    • Optimaliseer je beveiliging met een security.txt policy

      Bij LinQhost staat security altijd voorop. Toch kan het gebeuren dat er iets over het hoofd wordt gezien, hoe zorgvuldig je ook bent. Gelukkig zijn er ethische hackers, ook wel white hat hackers genoemd, die graag kwetsbaarheden opsporen en melden. ...
    • Canonical URL's en hoe je ze gebruikt

      Het ontbreken van canonical links kan problemen opleveren bij de indexering door crawlers, omdat dit kan leiden tot een oneindig aantal pagina's dat geïndexeerd moet worden. Canonical URL's zijn een belangrijk concept in zoekmachineoptimalisatie ...