我们正在开发一个非常简单的评论系统。我们已经完成了系统,使用PHP和MySQL,没有任何问题。
现在,问题是我们需要把这些表单,放到几个不同的站点,甚至同一个站点的不同位置。
目前我们有以下文件:
-
deliver_com .php:选择前面所有与domain_id匹配的注释
-
ui/deliver_com .php:前一个文件的HTML,它显示了之前的评论和表单本身发送一个新的。
说,我们所想到的,是生成div和表单,使用JavaScript和文档。然后,表单将把信息发送回我们的服务器,由PHP脚本处理并存储到数据库中。
现在,我们主要关注的是,我们如何验证注释确实来自包含脚本的站点?
我知道应该创建类似XSRF令牌的东西来解决这个问题,但是我不得不承认,在逻辑上提供一些帮助将是非常感谢的。
同样,我要提到的是,表单目前有两个隐藏的输入,一个用于识别网站(作为domain_id),另一个用于识别该网站的特定部分(作为file_id)。
一些想法:
在这一刻,我意识到,因为我们在HTML中使用PHP变量,它将是方便的使用JavaScript,只生成一个iframe,其中的信息将被放置。
为了包含XSRF阻止令牌,这个修改也是必要的。通过这样做,我们将避免来自其他网站的评论?我是不是失去了什么?
你应该给每个注释"section"一个id。我们将其命名为"comment_post_id"(就像wordpress一样)。因此,对于每个评论表单,您应该有一个隐藏的输入,在提交评论时给出id。因为你肯定想在下面显示最近的评论,你应该使用php或mysql检查在你的数据库中是否匹配comment_post_id。
如果你想避免利用你的注释函数,你应该使用验证码,因为它们是唯一安全的方法。当然,你可以检查referer ($_SERVER['HTTP_REFERER']),但这不会给你带来实际的好处,因为那些试图利用你的评论系统的人只会放弃一个有效的referer。
可以让初始javascript读取文档。并向您的服务器发出请求,在引用器中暴露他们的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;
}
}
}
}
}