[PHP] PHProxy output -> hex output -> JS: unescape

Pagina: 1
Acties:
  • 1.327 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 10-09 21:35
Okay, ik ben bezig met een soort van webproxy gebaseerd op phproxy. Wat ik wil ik dat iemand een pagina opvraagt en deze terugkrijgt in gecodeerde html, dat door middel van JS's unescape functie weer wordt omgezet in html. Aka firewalls lezen dit niet.

Werkt allemaal perfect, helaas alleen bij kleine pagina's. Ik heb echt geen flauw idee waarom, maar bij grotere outputs stopt hij er plots mee.

Hier wat code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
/* Converteert een string 
naar unescape. Output: %XX */

function tounescape($string) {
$hex = bin2hex($string);
$chunk = chunk_split($hex, 2, '%');
$length = strlen($chunk);
$result = '%'.substr($chunk, 0, $length-1);

return $result;
}


Dan het hele phproxy script en uiteindelijk wordt de gehele output ($_body_response) geconverteerd en weergegeven:
PHP:
1
2
3
<script type="text/javascript">
document.write(unescape("<?php print(tounescape($_response_body)); ?>"));
</script>



Werkt wel, helaas alleen bij hele kleine pagina's.
Iemand een idee waarom?

Alvast bedankt!
WeeJeWel

Homey — Critics are those without skills to create.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Waarom de omweg via url-encoding (waarbij javascript's escape en unescape niet eens RFC-compliant zijn)?

Dit zou gewoon moeten werken (gewoon c-style escaping):
PHP:
1
2
3
<script type="text/javascript">
document.write('<?php echo addcslashes($_response_body, "\0\n\r\t\\'/"); ?>');
</script>

[ Voor 4% gewijzigd door crisp op 20-08-2007 12:22 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 10-09 21:35
Het moet juist gecodeerd worden, om de firewalls te bypassen. Met dat stukje code dat je me net gaf codeerd hij dus niks, maar voegt hij wat slashes toe.

De output moet dus juist %XX zijn, zodat javascript (client-side) can decoden.

Homey — Critics are those without skills to create.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Ah, op die fiets :)

Probeer eerst eens uit te zoeken of dat ligt aan document.write (een arbitraire limiet op lengte wellicht?) of aan unescape (waarvan bekent is dat het problemen heeft met high-ASCII tekens, het is niet voor niets deprecated). Probeer ook eens verschillende browsers uit.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Je geeft aan dat het bij kleine pagina's wel werkt: Split simpelweg een pagina op in een heleboel van die kleine stukjes.

Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 10-09 21:35
@crisp, php (dus de server) is het probleem, anders zou de bron wel in orde zijn.
@Pulsher, ik heb dit geprobeerd op deze manier:

PHP:
1
2
3
4
5
6
7
<?php (...)
$finalcontent = explode("FAKETEXTTOSPLIT", chunk_split(tounescape($_response_body), 200, "FAKETEXTTOSPLIT"));
?>

<script type="text/javascript">
document.write(unescape("<?php print(implode('', $finalcontent)); ?>"));
</script>


Dit werkte helaas ook niet. Een voorbeeld van de output kun je zien op http://www.weejewel.net/p0x

Homey — Critics are those without skills to create.


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

waarom maak je de adresbar van IE niet na?
dat is jouw site, waar je request naar je PHP script stuurt. Dat script haalt www.google.be op en stuurt het terug als javascript variabele in base64. Dan decodeer je de content via javascript naar html en toon je 't in het frame eronder. Van unescape characters weet ik niet veel, maar met base64 heb ik al zoiets gemaakt en base64 is overal hetzelfde.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Weet je zeker dat het door de grootte van de pagina komt? Ik zou me kunnen voorstellen dat deze manier er voor zirgt dat javascript niet werkt en dat daardoor bepaalde sites ook niet werken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 10-09 21:35
era.zer, dat doe ik nu dus, alleen zonder frame :P
en Janoz, ik neem aan dat het de grootte is, want JS is normaal gesproken al uitgeschakeld in phproxy.

Kan ik niet op een of andere manier de errors zien?

Homey — Critics are those without skills to create.

Pagina: 1