1

我们正在开发一个非常简单的评论系统。我们已经做了系统,使用PHP和MySQL没有任何问题。

现在,问题是我们需要将这种表格提供给几个不同的站点,甚至是同一个站点的不同位置。

此时我们有以下文件:

  • Deliver_comm.php:选择所有与 domain_id 匹配的先前评论

  • ui/deliver_comm.php:上一个文件的 HTML,显示以前的评论和表单本身以发送新的。

也就是说,我们的想法是使用 JavaScript 和 document.write 生成 div 和表单,然后表单会将信息发送回我们的服务器,在那里它应该由 PHP 脚本处理并存储到数据库中。

现在,我们主要关心的是,我们如何验证评论是否真正来自包含脚本的站点?

我知道应该创建类似 XSRF 令牌的东西来解决这个问题,但我不得不承认,在逻辑上的一些帮助将不胜感激。

另外,我要提一下,此时表单有 2 个隐藏输入,一个用于标识网站(作为 domain_id),另一个用于标识该网站的特定部分(作为 file_id)。

一些想法:

此时我意识到,由于我们在 HTML 中使用 PHP 变量,因此使用 JavaScript 会很方便,只生成一个 iframe,信息应放置在其中。

此外,此修改对于包含 XSRF 预防令牌是必要的。通过这样做,我们会避免来自其他网站的评论吗?我失去了什么吗?

4

2 回答 2

1

你应该给每个评论“部分”一个id。我们称它为“comment_post_id”(就像 wordpress 一样)。因此,对于每个评论表单,您应该有一个隐藏的输入,在提交评论时提供 id。由于您当然想在下面显示最近的评论,因此您应该使用 php 或 mysql 检查数据库中匹配的 comment_post_id。

如果您想避免利用您的评论功能,您应该使用验证码,因为它们是唯一安全的方法。当然,您可以检查引用者 ($_SERVER['HTTP_REFERER']) 但这不会给您带来实际优势,因为试图利用您的评论系统的人只会过度提供有效的引用者。

于 2013-05-25T10:39:47.417 回答
0

您可以让初始 javascript 读取 document.location 并向您的服务器发出请求,在引荐来源网址中公开他们的 IP 地址。如果 IP 地址和域名匹配,则使用表单 html 和系统生成的密钥进行回复,以用于所有表单帖子。

function get_ip_address() {
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER) === true) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
                    return $ip;
                }
            }
        }
    }
}
于 2013-05-25T09:27:09.907 回答