我正在使用 mod security 来查找 post 参数中的特定值,并在出现重复时阻止请求。我正在使用 mod security 用户集合来做到这一点。问题是我的请求运行时间很长,因此单个请求可能需要 5 分钟以上。我假设的用户集合在第一个请求得到处理之前不会被写入磁盘。如果在执行第一个请求期间,另一个请求使用 post 参数的重复值进入,则第二个请求不会被阻止,因为该集合尚不可用。我需要避免这种情况。我可以在 mod 安全性中跨请求使用基于内存的共享集合吗?还有什么办法吗?片段如下:
SecRule ARGS_NAMES "uploadfilename" "id:400000,phase:2,nolog,setuid:%{ARGS.uploadfilename},initcol:USER=%{ARGS.uploadfilename},setvar:USER.duplicaterequests=+1,expirevar:USER.duplicaterequests=3600"
SecRule USER:duplicaterequests "@gt 1" "id:400001,phase:2,deny,status:409,msg:'Duplicate Request!'"
ErrorDocument 409 "<h1>Duplicate request!</h1><p>Looks like this is a duplicate request, if this is not on purpose, your original request is most likely still being processed. If this is on purpose, you'll need to go back, refresh the page, and re-submit the data."