777权限在使用fwrite函数时是否存在安全风险?

3

我正在测试我的php表单并将所有请求记录到一个单独的文件中。目的是查找表单是否被用于垃圾邮件,并希望消除它。

使用fwrite()记录请求时,使用777权限是否危险或不必要?有什么替代方案?


执行是不必要的(最后一位) - armadadrive
2个回答

5

您只需要该应用程序正在运行的用户具有写入文件的权限。管理员能够读取该文件有时也很方便。除此之外,没有人需要访问该文件。因此,0640是这种文件最合理的权限。

特别地,没有人需要执行该文件,这是使用0777设置的位之一。执行位仅对目录有用。(以及可执行程序,但这不适用于此处。)

0640 = user/owner read/write, group read only, other no access
0777 = user/owner read/write/execute, group read/write/execute, other read/write/execute

umask是一个非常有用的工具,可以帮助您设置正确的权限。您可以使用umask来设置权限模板,而不是创建具有明确权限的文件。由于目录需要可执行权限而文件不需要,umask将更加合理地掩盖不同类型文件的权限,而不是显式设置它们。例如,在您的情况下:

umask(027); // Owner permissions unchanged, Group permissions mask 2, drop all other permissions
fopen('foo', 'w', 0777); // Creates file with *0640* permissions, because of mask
mkdir('bar', 0777); // Creates dir with *0750* permissions, because of mask

我将所有文件设置为0640,目录设置为0750。但现在我遇到了“禁止”错误,而不再是404错误。 - user3216933
@user3216933 在什么情况下出现了那个错误?是什么导致了这个错误? - kojiro
我只是在查看index.php页面(表单所在的页面),当文件权限为0640时,我无法再访问它。 - user3216933
@user3216933 网络服务器的用户账户是文件的所有者还是组所有者?您是如何设置权限的? - kojiro
@user3216933,你最初的问题是关于fwrite的。现在你正在询问有关Webroot的一般性问题。我认为这应该作为一个单独的问题来提出。 - kojiro
显示剩余3条评论

0

777权限是由父目录或PHP设置默认设置的。您可以通过chmod("/somedir/somefile", 0640);更改它。 查看手册

是的,这很有野心,并且在表单创建的文件上拥有可执行权限可能很危险。

祝你好运!


默认设置的0777权限旨在与umask一起使用,以产生合理的权限。(还要注意,前导零对于将值解释为八进制是很重要的。) - kojiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接