服务器发送的事件和php文件.如何保护php?



下午好。我使用SSE技术来代替对数据库的恒定AJAX请求。我有一个页面,打开服务器发送的事件工作的php文件。最简单的代码:

var source = new EventSource("/path/test_live.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};

php文件也很简单:

header('Cache-Control: no-cache');
echo "retry: 5000n";
........
foreach ($result as $item) {
echo "data: ". $item['event']."n";
}
echo "n";
ob_flush();
flush();

每5秒从数据库中取出数据并传输到页面。这一切都很好!一切都很好。在未来,使用SSE,我想解决另一个问题。我想学习如何做SSE不是每N秒,但只有当一个新的事件出现在数据库中。一个文件填充表,一旦其中的值更改为另一个,就通知另一个php文件,其中的函数已经在上面描述过。但停止。我有一个不同的问题,它阻碍了我向前迈进。

只需在url中输入地址即可打开test_live.php文件。Domain.com/path/test_live.php -所有数据将打开。这不仅使访问主页变得毫无意义,而且还会激怒那些复制别人内容的人。数据以纯形式显示。

如何通过拒绝访问除EventSource之外的所有人来保护php ?我读过一个类似的问题,他们只是建议在GET POST请求上发送一些东西,以便php可以识别它。

https://stackoverflow.com/questions/60750760/eventsource-sse-server-sent-events-security例如这里

但如何转移"this"隐藏它,这样就无法打开带有"this"的PHP文件。直接url?是否有可能通过php定义,。htaccess命令拒绝,允许或使用javascript本身来解决这个问题?(例如,以某种方式加密路径?)。如果这可以通过cookie完成,那么php如何理解这一点并使一切安全?还是这个问题在原则上没有解决方案?

一天后和两杯咖啡

最后更新和我解决问题的选择。

我使用EventSource polyfill和post header。在php文件中,我检查getallheaders()

if (getallheaders()["Myheader"] === 'Varible') {
MyFunction();
} else {
header("HTTP/1.1 404 Not Found");
header('Location: 404-page.html');
}

很抱歉我的英语和难以阅读的文本。谢谢你的关注。

服务器发送的事件只是HTTP。为了保护你的EventSource,你应该像保护服务器上的其他资源一样保护它。我不是一个PHP开发人员,所以我不能给你的细节。但是,如果您确保用户在访问要链接到EventSource的页面之前已经登录,那么您可以使用相同的方法来限制对它的访问。如果他们没有被授权,那么EventSource可以返回一个401状态码。

最新更新