[JS] Virenscanner-gerecht ausgeben

27o8

abgemeldet
2 Mai 2006
9.028
933
Hallo,
wir haben einen Layer welchen wir auf verschiedenen Seiten einsetzen. Nun meldet die Heuristik von Avira, in Verbindung mit dem Internet Explorer, wohl diese Seiten als Virenbefallen :roll:.

Hier ein Beispiel was der Scriptcode ausgibt:
https://ross-media.de/layer/layer.php

Irgendwie verständlich das dort ein Scanner anschlägt, aber wir machen das so, damit wir mit document.writeln arbeiten können was ja bekanntlich keine Zeilenumbrüche enthalten darf. :roll:


Code:
PHP:
$output = 'Unser Layer-Code mit div und Iframe etc.';
$output = javascript_string_escape($output);
document.writeln("<?=$output; ?>");

Dazugehörige Funktionen:
PHP:
function javascript_charhex($char){
    $char_hex = dechex(ord($char));
    if(strlen($char_hex) < 2){
        $char_hex = '0' . $char_hex;
    }
    return "\\x$char_hex";
}

function javascript_string_escape($string){
    $out = array();
    for($x = 0; $x < strlen($string); $x++){
        array_push($out, javascript_charhex(substr($string, $x, 1)));
    }
    return implode('', $out);
}

Wie kann man das sauberer lösen? Seit dem das als Virus erkannt wird haben wir täglich bis zu 15.000 Aufrufe weniger weshalb das schnell geändert werden muss :(
 
Oder einfach mal Avira melden, dass es ein Fehlalarm ist.

Obwohl das "Crypting" sicherlich das Hauptproblem ist.
 
Ich selbst nutze kein Avira. Habe einige User die das gemeldet haben gebeten das als False Positive zu melden, aber die sagen das ginge nicht, oder die Datei wo der Virus drin wäre, wäre nicht auf dem Rechner. :roll:

Wenn jemand von euch Avira hat kann er das ja mal melden:
https://cash-town.de/betteln.php dort sollte in Verbindung mit IE eine Meldung kommen.

wie wäre es mit sowas:
Gibts da zufällig eine PHP Funktion mit der ich aus:

var foo = 'bar';
var bar = 'foo';
automatisch

var foo = 'bar';\nvar bar = 'foo';
machen kann? :think:
 
Wozu denn überhaupt das \n?? Das brauchst du doch gar net oder??

HTML:
 			 document.writeln("var foo = 'bar';var bar = 'foo';");

Das sollte doch auch langen oder??
 
Der ganze Layercode besteht ja aus mehr:

HTML:
document.writeln("<div id="1242763591" style="position:absolute; z-index:1; left: 100px; top: -1000px;">
<table border="0" style="background-color:#029191; width:900px; height:500px; border: none;" cellspacing="0" cellpadding="0">
<tr>
<td>
	<table cellpadding="0" cellspacing="0" border="0" style="background-color:none;">
	<tr style="height:30px;">
		<td align="left" style="padding-left:10px;">
		<span style="color:white; font-weight:bold;">Layerwerbung von Ross-Media.de</span>
		</td>
		<td valign="middle" align="right" style="padding-right:10px;">
		
			<a href="javascript: close_layer();"><img border="0" src="https://img1.cash-town.de/cash-town/icons/cancel.png" alt="Schließen"></a>
			
			<a href="javascript: pop();"><img border="0" src="https://img1.cash-town.de/cash-town/icons/link_go.png" alt="Neues Fenster"></a>
		
		</td>
	</tr>
	<tr>
		<td colspan="2">
		   <iframe width="900" height="500" src="https://ross-media.de/layer/frame.php?https://preisvergleich.guenstige-kinderartikel.de/" frameborder="0" scrolling="no"></iframe>
		</td>
	</tr>
	</table>
</td>
</tr>
</table>
</div>	
<script>
function close_layer(){
	layer1 = document.getElementById("1242763591");
	layer1.style.visibility = "hidden";
}

function pop(){
	layer1 = document.getElementById("1242763591");
	layer1.style.visibility = "hidden";
	window.open('https://preisvergleich.guenstige-kinderartikel.de/');
}


var slide_y_1242763591 = -1000;
function slide_loop_1242763591(){
	layer1 = document.getElementById("1242763591");
	slide_y_1242763591 = slide_y_1242763591 + 20;
	layer1.style.top = slide_y_1242763591 + document.body.scrollTop;
	if(slide_y_1242763591 < 50){
		window.setTimeout("slide_loop_1242763591();", 20);
	} else {
		layer1.style.top = 50 + document.body.scrollTop;
	}
}
slide_loop_1242763591();
</script>
");

Da ist es schon schwierig das alles in eine Zeile zu packen. :-? Und wenn ich \n weg str_replace kommt kein Layer mehr :think:
 
Hab's mal gemeldet. Vielleicht hast ja Glück. :ugly:
Danke fürs melden :D.

PHP:
echo str_replace("\n", '\n', $layerzeug);
Im Prinzip funktioniert es so wie es soll, verursacht allerdings Probleme:

Fehler: missing ) after argument list
Quelldatei: https://ross-media.de/layer/layer2.php
Zeile: 1, Spalte: 102
Quelltext:
layer1 = document.getElementById("1242766982");\n layer1.style.visibility = "hidden";\n window.open('https://guenstige-kinderartikel.de/rand_post.php');\n}\n\n\nvar slide_y_1242766982 = -1000;\nfunction slide_loop_1242766982(){\n layer1 = document.getElem

Genau deshalb hatten wir das gecryptet, weil es anders immer nur probs gab :(
 
Grad hat mir jemand per ICQ den Tipp gegeben das ich das mit rawurlencode in php, und mit unescape in JS machen sollte. Habe das nun umgesetzt und jemanden gebeten mit Avira zu testen, und nun kommt keine Virenwarnung mehr. :dance:
 
Du verwendet
Code:
document.writeln('text');
in deinem "text" kommen einfache Anführungszeichen vor. Da diese den Text beenden, musst du diese escapen.

z.B.
PHP:
str_replace("'", '\\\'', $layercontent);
Das geht jedoch nur, wenn $layercontent aus dem Inhalt des layers besteht (also ohne das document.writeln(' und dem abschließenden ');