我正在通过HTML表单获取字符串,并使用以下命令将它们存储在PHP变量中:
$var1=$_GET['name']
现在我使用以下字符串将这些字符串传递给python脚本
shell_exec("python_file.py $var1")
假设,在PHP中收到的字符串就像世界一样.当变量传递给python文件时. Python将其视为两个不同的参数,例如:
##python code
arg=sys.argv
print arg[0] -> python_file.py
print arg[1] -> 'hello'
print arg[2] -> 'world'
有什么解决方法?
我尝试将the脚传递给其他引号.但这无济于事.
我没有在python代码中添加任何split()函数.
编辑:
变量是数据库中的条目. python脚本打开数据库,变量定义相应的更改.因此,如果python文件由于空格而将一个变量读取为2.它将错误的条目添加到数据库的错误列中
解决方法:
通常,您可能需要使用引号:
shell_exec(‘python_file.py“’.$var1.’”’)-最后的引号是简单的引号
您还可以使用escapeshellarg(),它将为外壳程序充分准备参数,按照我说的做,甚至更多,以便引用中的引号也能正确传递.
建议使用此解决方案从用户输入传递参数,这样可以避免灾难,例如escape-shell vulnerabilities.
我试过的
test.py:
import sys
print(sys.argv)
exec.php:
print(shell_exec('python3 test.py '.escapeshellarg($arg))); ?>
在我的壳中:
$php5 exec.php
[‘test.py’, ‘hello world’]
标签:python,php
来源: https://codeday.me/bug/20191025/1931820.html