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
然而,当我在nano或cat中打开data.yml时,我得到的是:
Sum Random''z String'"s with quotemarks
我不想去那里。当我在nano或cat中打开它时,有没有办法让''字符不会出现在那里?我该换什么?编辑:$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()
希望能有所帮助。