我试图限制从我的网站发送的电子邮件数量,以应对托管服务电子邮件的限制.我正在使用cron作业和指示堆积数据库中的电子邮件,以检查发送的电子邮件数量是否接近发送的最大电子邮件数量限制.
我这样做的方法是直接执行预定的进程,然后让它"休眠"一段时间(根据它在队列中的位置),然后发送电子邮件并登录数据库.为了进一步解释我使用计划任务和"睡眠"的原因,请考虑以下场景:
我需要在单线程PHP语言中使用多线程!作为一种解决方法,我使用了cron作业,其中每个堆积的电子邮件被安排在time()
(即直接触发预定作业)执行,该电子邮件挂钩到发送电子邮件的同一功能.使用标志,该函数知道请求是堆积的电子邮件,并使其"休眠",直到电子邮件配额重置所需的时间.
问题:如果5个人几乎同时注册(虽然我们仍然有一个电子邮件堆),那么我们有5个cron作业,应该同时执行然后再睡一会儿(睡眠时间可能不同,如果堆中的电子邮件数量已经大于电子邮件配额数,然后发送电子邮件.但是,当我检查数据库中的日志时,我发现计划的作业是按顺序执行的,而不是并行执行的.有时它会发生cron作业在另一个结束之前被触发,但它们不会同时触发.
我知道wordpress cron的工作不是真正的cron工作,一旦有人访问网站就会被解雇(我确保在发送注册请求以解雇所有计划任务后刷新页面),但它们似乎是唯一的我的选择,因为我的托管服务器不允许访问服务器既不允许安排cron作业.
以下是执行上述操作的代码的一部分:
//Test example to pile up emails, where quota is set to 2 emails every 30 seconds
$Emails_Threshold = 2;
$Threshold_Duration = 0.5*60;
//Get email indicator info
$Email_Info = $wpdb->get_row(
"SELECT *
FROM PileEmails
WHERE priority = -1
AND Status='New';"
,ARRAY_A);
if ($sleep ==0 && $Queue_Info_id==0){ //Not a scheduled event
//Check if there are queued emails
$Queue_exist = $wpdb->get_row (
$wpdb->prepare("
SELECT Status
FROM PileEmails
WHERE Status='Queued';" …
Run Code Online (Sandbox Code Playgroud) 我是网站安全的新手,目前正在尝试深入了解同源策略。虽然在 stackoverflow 和其他地方有关于 SOP 概念的非常好的帖子,但我找不到关于 chrome 和其他浏览器是否允许从一开始就“发送”跨域 XHR 发布请求的更新信息。
从这个5 年前的帖子来看,chrome 似乎允许请求传递到请求的服务器,但不允许读取请求者的响应。
我在我的网站上进行了测试,试图从不同的域更改我服务器上的用户信息。详情如下:
用户(登录到 www.mysite.com 时)打开 www.attacker.mysite.com 并按下一个按钮,该按钮会向“www.mysite.com”服务器发出 POST 请求......提交的隐藏表单(此处没有令牌) case) 具有更改“www.mysite.com”服务器上的用户信息所需的所有信息--> 结果:CSRF 成功攻击:用户信息确实发生了变化。
现在做同样的事情,但使用 javascript 通过 JQuery 提交表单.post
而不是提交表单--> 结果:除了 chrome 给出正常响应:
请求的资源上不存在“Access-Control-Allow-Origin”标头
,我发现在服务器端没有做任何更改......似乎请求甚至没有从浏览器通过。用户信息根本没有改变!虽然这听起来不错,但我期待相反。
根据我的理解和上面链接的帖子,对于跨域请求,浏览器应该只阻止服务器响应,而不是从一开始就将发布请求发送到服务器。另外,我没有任何 CORS 配置集;没有Access-Control-Allow-Origin headers
被发送。但即使我有那个设置,它也应该只适用于“读取”服务器响应而不是实际发送请求......对吗?
我想到了预检,其中发送请求以检查服务器是否允许它,从而在发送其实际数据以更改用户信息之前阻止请求。但是,根据Access_Control_CORS,这些预检仅在不适用于我的简单 AJAX 发布请求的特定情况下发送(默认情况下包括带有 enctype 的简单表单,application/x-www-form-urlencoded
并且不发送自定义标头)。
那么,chrome 是否已经更改了其安全规范以从一开始就阻止对跨域的 post 请求?或者我对同源策略的理解在这里遗漏了什么?
无论哪种方式,了解是否有在不同 Web 浏览器中实施的更新安全措施的来源都会有所帮助。