还有可能,你第一次成功写入了临时文件,但在你后面的写的过程中,劫持者对这个临时文件进行了一些操作,这种情况可以通过检验码的方式来检查,如下:
<?php // write something to the file; then hash it $hashnow = sha1_file( $tempFilename ); $_SESSION['hashnow'] = $hashnow; // later, get ready to write again $hashnow = sha1_file( $tempFilename ); if ( $hashnow === $_SESSION['hashnow'] ) { // write to the file again // get and save a new hash $hashnow = sha1_file( $tempFilename ); $_SESSION['hashnow'] = $hashnow; } else { exit ( “Temporary file contains unexpected contents.\nStart over again.”); } ?>
4.只读已知文件
与只写已知文件类似,在读文件前需要检查检验码是否一致,防止临时文件被篡改。除此之外,如果你使用了openssl,可以在写文件的时候,将合法证书放在文件的末尾,这样的读的时候可以先检查文件末尾是否存在合法的证书;如果你没有使用openssl,也可以写入一段特定的算法生成的token,原理类似。
5.检查上传的文件
判断文件是否是通过 HTTP POST 上传的
bool is_uploaded_file ( string $filename )
如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。 如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话,这种检查显得格外重要。
为了能使 is_uploaded_file() 函数正常工作,必须指定类似$_FILES['userfile']['tmp_name'] 的变量,而不是从客户端上传的文件名 $_FILES['userfile']['name']。需要注意的是is_uploaded_file返回false,不一定是上传文件被劫持了,也有可能是文件太大或者上传部分等,这些可以通过$_FILES['userfile']['error']查看。
您可能感兴趣的文章: