在php中传递base64编码的数据

时间:2012-06-26 13:20:54

标签: php base64 xss

我有一个页面通过GET接收base64编码数据,它在隐藏的输入中打印数据,并通过get传递到另一个页面。

问题在于:当我通过时

"Peuq/0X4XhFV+XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS+CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"

通过GET变成

"Peuq/0X4XhFV XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"

...所以openssl无法正常工作。我该如何解决?

2 个答案:

答案 0 :(得分:3)

Base64可以输出+个符号,这些符号在URL中发送时被解释为空格。您可以使用urlencode来缓解此问题:

<?php
$base64_data = $_GET['base64'];
$url_data = urlencode($base64_data);
$field_data = htmlspecialchars($url_data);
printf('<input type="hidden" value="%s" name="pass-it-on">', $field_data);
?>

第二页:

<?php
$base64_data = $_GET['pass-it-on'];
$real_data = base64_decode($base64_data);
?>

请注意,无需解码htmlspecialcharsurlencode来电,因为这是自动完成的。

答案 1 :(得分:1)

网址中的某些字符很特殊,例如代表空格的+。要通过URL发送任意数据,您需要 URL转义它以避免数据中包含的字符被识别为“特殊字符”。由于您将数据放入HTML中,因此 还需要对其进行HTML转义,以避免将URL编码数据中的字符识别为特殊HTML字符。因此:

$data = /* some data */;
$base64Data = base64_encode($data);
$urlData = urlencode($base64Data);
$htmlData = htmlspecialchars($urlData);
printf('<input type="hidden" value="%s" name="pass-it-on">', $htmlData);