;字符添加到应该添加的位置';不要


 characters adding where they shouldn't be

PHP:

$var = "Sum Random'z String"s with quotemarks"
$send = base64_encode($var)

然后它将base64编码的字符串发送到服务器。

服务器部分(Python)尝试解码base64编码的内容并将其写入文件:

f = open("/root/data.yml","w")
f.write(base64.b64decode(sys.argv[1]))
f.close()

sys.argv[1]是$send

然而,当我在nanocat中打开data.yml时,我得到的是:

Sum Random''z String'"s with quotemarks

我不想去那里。当我在nanocat中打开它时,有没有办法让''字符不会出现在那里?我该换什么?编辑:$var取自没有''的文本区域

您不需要同时转义单引号和双引号。您只需要用(即")转义您引用的字符串

$var = "Sum Random'z String'"s with quotemarks";

这可能不是你唯一的问题。但这也是问题的一部分。

更新

根据用表单文本区域中的数据设置的$var的更新,您需要查看stripslashes()

我认为这里的问题是,您对不需要转义的字符进行转义,双qoutes中的单qoutes不需要转义,反之亦然。

示例:

OK; " ' "
OK; ' " '
NO; ' ' '
OK; ' '' '
NO; " " "
OK; " '" "

尝试执行以下操作:

$var = 'Sum Random''z String"s with quotemarks';
$send = base64_encode($var);

编辑:如果从未说过它来自文本区域,请在对值进行编码之前尝试对其运行stripslashes

php对我来说很好。我敢打赌,背后有一些安全机制可以逃离危险字符。

你可以自己用python中的stripserases来取消对它们的捕获。

听起来像是在PHP中启用了魔术引号。

如果您有访问权限,您可以编辑php.ini或在发送数据之前尝试以下操作:ini_set('magic_quotes_runtime', 0);

试试这个:-

f = open("/root/data.yml","w")
x = base64.b64decode(sys.argv[1])
x.replace("'"", "")
f.write(x)
f.close()

希望能有所帮助。