Php 将文件名作为post变量是否不好?

Php 将文件名作为post变量是否不好?,php,mysql,image,file-upload,Php,Mysql,Image,File Upload,我不知道是否有人有可能滥用这个。什么是变通办法?我不希望有人能够通过这种方式下载内容来滥用我的服务器 有一个选项可以通过电子邮件重新发送装运标签。我基本上有它的设置,所以没有数据库的工作,除了准备的网页。我能想到的唯一其他方法是让post变量作为行的ID,然后从中提取文件名 那么,将文件名作为post变量(可能会被篡改)是否不安全呢?只有在执行类似于readfile()或include()的操作时,才不安全 使用行ID会更好,但即使如此,您仍然需要考虑是否允许用户访问该文件(以避免随机ID=1

我不知道是否有人有可能滥用这个。什么是变通办法?我不希望有人能够通过这种方式下载内容来滥用我的服务器

有一个选项可以通过电子邮件重新发送装运标签。我基本上有它的设置,所以没有数据库的工作,除了准备的网页。我能想到的唯一其他方法是让post变量作为行的ID,然后从中提取文件名


那么,将文件名作为post变量(可能会被篡改)是否不安全呢?

只有在执行类似于
readfile()
include()
的操作时,才不安全


使用行ID会更好,但即使如此,您仍然需要考虑是否允许用户访问该文件(以避免随机ID=1 ID=2 ID=3测试)。


使用行ID会更好,但是即使这样,您仍然需要考虑是否允许用户访问该文件(以避免随机ID=1 ID=2 ID=3测试)。POST请求和GET请求都可能被滥用,因此在最坏的情况下,您的网站可能是XSS攻击的手段,或者可能被用作垃圾邮件节点


除了文件名或条目ID之外,要做的事情是发送一些散列,然后检查这两个是否匹配,即是否是与此散列关联的条目。因此,简单地尝试不同的ID是行不通的,因为滥用者也必须猜测正确的哈希值。一句忠告:不仅要散列id或文件名,还要散列发送电子邮件的时间和一些salt。

您永远不应该信任传入的数据。POST请求和GET请求都可能被滥用,因此在最坏的情况下,您的网站可能是XSS攻击的手段,或者可能被用作垃圾邮件节点


除了文件名或条目ID之外,要做的事情是发送一些散列,然后检查这两个是否匹配,即是否是与此散列关联的条目。因此,简单地尝试不同的ID是行不通的,因为滥用者也必须猜测正确的哈希值。一句忠告:不仅要散列id或文件名,还要散列发送电子邮件的时间和一些盐。

我会将其附加到发送给用户的电子邮件中。因此,
fopen()
fread()
使用行ID。如果附加到电子邮件,您仍然需要检查以确保允许用户访问-当然,除非所有用户都有权访问所有文件。@nick通常没有问题。如果这回答了您的问题,请将其标记为已接受(单击勾号),以便其他人可以看到哪些问题需要回答,哪些不需要。我会将其附加到发送给用户的电子邮件中。因此,
fopen()
fread()
使用行ID。如果附加到电子邮件,您仍然需要检查以确保允许用户访问-当然,除非所有用户都有权访问所有文件。@nick通常没有问题。如果这回答了您的问题,请将其标记为已接受(单击勾号),以便其他人可以看到哪些问题需要答案,哪些问题不需要答案。如果某些文件只能由选定的用户访问,则哈希将不安全,因为具有正确哈希和ID的错误用户仍然可以访问该文件。在这种情况下,应该验证用户是否具有访问该文件的权限,而不是“通过模糊性实现安全性”。使用这种方法,我不会从上面进行数据库拉取?或者你是在建议使用该方法以及散列数据?@MrCode:当然,当你可以选择使用传统授权时,你应该检查权限。但有时这是不可能的,即发送电子邮件重置密码或向非用户发送文件。但话说回来,为什么不使用附件呢?这样会更好。@NickMcCally-你总是做数据库检查。使用原始输入数据是个坏主意。如果您可以授权用户,则执行此操作而不使用哈希,在另一种情况下-使用哈希并检查它是否适合请求的文件。如果某些文件只能由选定的用户访问,则哈希将无法保护它,因为具有正确哈希和ID的错误用户仍然可以访问该文件。在这种情况下,应该验证用户是否具有访问该文件的权限,而不是“通过模糊性实现安全性”。使用这种方法,我不会从上面进行数据库拉取?或者你是在建议使用该方法以及散列数据?@MrCode:当然,当你可以选择使用传统授权时,你应该检查权限。但有时这是不可能的,即发送电子邮件重置密码或向非用户发送文件。但话说回来,为什么不使用附件呢?这样会更好。@NickMcCally-你总是做数据库检查。使用原始输入数据是个坏主意。如果您可以授权用户,那么就这样做,不要使用哈希,在另一种情况下,使用哈希并检查它是否适合请求的文件。