通过GET参数传递原始base64编码的字符串是否安全?
当前回答
理论上,是的,只要您不超过客户端或服务器的最大url和/oor查询字符串长度。
在实践中,事情可能会变得有点棘手。例如,它可以在ASP上触发HttpRequestValidationException。如果该值碰巧包含“on”,并且您在后面留下“==”。
其他回答
我不认为这是安全的,因为例如,“=”字符在原始基数64中使用,也用于区分参数与HTTP GET中的值。
不,你需要对它进行url编码,因为base64字符串可以包含“+”,“=”和“/”字符,这可能会改变你的数据的含义-看起来像一个子文件夹。
下面是有效的base64字符。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
是也不是。
base64的基本字符集在某些情况下可能与url中使用的传统约定相冲突。但许多base64实现允许您更改字符集以更好地匹配url,甚至提供一个字符集(如Python的urlsafe_b64encode())。
您可能面临的另一个问题是URL长度的限制,或者更确切地说-缺乏这样的限制。由于标准没有规定任何最大长度,浏览器、服务器、库和其他使用HTTP协议的软件可能会定义自己的限制。
理论上,是的,只要您不超过客户端或服务器的最大url和/oor查询字符串长度。
在实践中,事情可能会变得有点棘手。例如,它可以在ASP上触发HttpRequestValidationException。如果该值碰巧包含“on”,并且您在后面留下“==”。
还有其他base64规范。(详见表格)。但实际上你需要65个字符来编码:26个小写字母+ 26个大写字母+ 10个数字= 62。
你还需要两个['+','/']和一个填充字符'='。但是没有一个是url友好的,所以使用不同的字符,你就设置好了。上面图表中的标准字符是['-','_'],但你可以使用其他字符,只要你对它们进行相同的解码,并且不需要与他人共享。
我建议你编写自己的助手。像下面这些来自php手册页base64_encode的注释:
function base64_url_encode($input) {
return strtr(base64_encode($input), '+/=', '._-');
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '._-', '+/='));
}
推荐文章
- Printf与std::字符串?
- 不区分大小写的“in”
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 可能增加的最坏的空间使用量是多少?
- 如何在PHP中捕获cURL错误
- Ruby数组到字符串的转换
- 为什么在Java和。net中不能修改字符串?