ModSecurity支持multipart/form-data编码用于文件上传
ModSecurity总是上传文件到临时目录。你可以用SecUploadDir指示选择目录:
SecUploadDir /tmp
最好选择一个私有文件夹存放文件,只允许启动web服务器的用户访问。否则,其他的服务器用户可能访问通过web服务器上传的文件。
你可以选择执行一个外部脚本在允许文件通过web服务器到达应用程序之前校验这个文件。SecUploadApproveScript指示提供了这个功能。如下例所示:
SecUploadApproveScript /full/path/to/the/script.sh
一个命令行参数会提供给脚本——正在被上传的文件的完整路径。脚本可以对文件作任何操作。处理完之后,响应结果会输出到标准输出。如果相应结果的第一个字符是“1”,文件将会被接受。如果是其他的结果,(上传文件的)请求将会被拒绝。你的脚本可以用响应结果来提供描述性更强的错误信息。这个信息会被输出到debug log。
你可以选择保存通过web服务器上传的文件。只要在你的配置中添加下列行就可以了:
SecUploadKeepFiles On
文件会被存放在SecUploadDir指示指定的目录中。
Apache 1.x没有提供一个合适的底层架构用来作请求侦听。除非把请求整个放在内存中才能侦听。Apache 1.x提供一个选择,分析内存中的multipart/form-data(文件上传)请求,或者根本不分析(选择性的关闭POST处理)。
但是,使用Apache 2.x,你可以定义用来解析内存中存放的multipart/form-data的内存数量。当一个请求大于你允许的数量的时候,会使用一个临时文件。缺省值是60KB,但是可以通过SecUploadInMemoryLimit指示来改变:
SecUploadInMemoryLimit 125000