问题“解决”了吗?在回溯到权限首次停止的地方后,权限拒绝突然无缘无故地消失了。
我正在构建一个网页,用户必须能够在本地数据库中发送选择某些预定义名称的输入。(用户输入可以是 html 表单或导入的 .txt 文件)
我希望能够从 php 调用 python 脚本,进一步从数据库获取其他信息。有了这些信息,我需要能够创建要发送回用户的文件
我怎样才能在不给用户带来安全漏洞的情况下进行脚本调用,我该如何配置我的 Apache?
我使用 apache 2.2.3 作为网络服务器
现在,当我尝试从 Python 脚本写入文件时,Apache 的权限出现问题?即使我授予脚本、文本文件和目录完全权限 (777),写入权限仍被拒绝。Apache 本身是否必须具有某些不允许 Web 用户写入的安全配置?
Traceback (most recent call last):
File "python/pythonscript.py", line 6, in ?
f = open("/var/www/(path)/textfile.txt", "w")
IOError: [Errno 13] Permission denied: '/var/www/(path)/textfile.txt'
我可以配置我的网络服务器以允许脚本在本地读取和写入文件,但不允许网络用户拥有该权限吗?如果可以,最安全的方法是什么?
答案1
嗯;我不是这方面的专家,但请注意你的问题:
我可以配置我的网络服务器以允许服务器运行脚本并在本地写入文件,但不允许用户拥有该权限吗?
相当具有误导性 - 默认情况下,您计算机上执行的所有操作都将由 Web 服务器代表用户完成。对于访问您网页的远程用户,没有用户概念,无论他们做什么,都将作为运行 Web 服务器的用户。
成功启动 Python 脚本后,Web 服务器配置的概念不再适用;现在您只需运行任何 Python 脚本(通常以用户 www-data 的身份运行),并应用正常访问规则。要使相关脚本能够写入文件,运行 Web 服务器的用户必须具有相关目录的写入权限。
我强烈建议将文件写入 /var/www 以外的其他位置,例如 /tmp。您可能需要限制写入文件的大小?请确保只读取(和写入)您上传的字节,而不要尝试执行其中的任何操作。
答案2
关键是要清理用户输入——除了使脚本可执行之外,不需要做任何特殊配置。用户只能执行代码执行的操作,而代码执行的操作完全由你控制。确保安全性没有灵丹妙药。有几件非常重要的事情需要注意:
绝对确保用户无法影响执行/读取的脚本/文件的路径。例如,
f=open("/tmp/myfiles/"+some_path_from_user,"w")
如果允许用户写入他想要的任何文件(apache 有权限),那就太糟糕了执行脚本时尤其如此。如果可能,所有脚本路径都应预先定义,并且用户不能修改这些脚本。
将你的脚本与其他文件分开。
设置文件/脚本权限时使用最小特权原则。