我的网站包含Prototype Framework并用PHP编程。 (我知道非常非常基本的javascript)
网站普通访客&其行动
有些类似于keepvid .com
A)有一个输入框,用户放置链接,然后按提交。 (?var = userfoo通过原型框架工作执行)(请求被发送到同一页面action = index.php)
B)它显示加载gif而不是显示结果默认情况下隐藏它并根据请求显示。
C)现在不刷新或重新加载父窗口html(主页面)。
D)用户再次放置链接并按提交它执行相同的b c过程。
每件事都在工作,但我在检查日志时会注意到问题。 有些人使用脚本来获取输出。不是普通的访客,你可以说或是leechers。
问题:
1)但是如果有人在浏览器中输入http:// url?var = foo& var = bar,它将生成div的输出内容,这意味着没有主页访问。任何人都可以通过查询并直接获得结果。
2)我尝试使用会话令牌但它失败了,因为它在div中重新生成。还没有刷新父级,因此会话令牌不匹配(这只是带有AJAX REQUEST 1请求输出正常但第二次请求失败,因为父令牌相同。并且提交按钮使用相同的令牌)在纯PHP上它可以刷新页面,但我不想刷新页面。我只是想显示加载gif。
3)任何人都可以使用curl php并抓住页面。所以我想要一个Javascript验证(HIDDEN)。如果失败了Javascript,那么如果失败则比启动验证码安全性更快。我不想让它在详细或通过命令行或通过其他脚本(用于获取)工作。
4)我不知道究竟是什么叫做什么。我认为他们是XHR。
我想通过
为我的网站提供安全保障1)URL变量注入之类的 ?VAR = FOO&安培;&安培; VAR2 =巴 但也允许转换(如果有人这样做)转移页面 ?redirect = foo并加载主页并将该重定向值放入输入框
2)基于服务器的验证但在div内,必须显示加载gif并且不要重新加载整个页面..
我看的东西却失败了......
1)JCryption但它需要Jquery而不是我必须重新编码所有内容......
2)
// If the request did not come from AJAX, exit:
if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){
exit;
}
此命令因IE7浏览器而失败。 (这是唯一最好的方法,但只有一个浏览器失败)还有一个问题是,如果有人在本地主机上创建运行它将操作更改为http://myurl,而不是仍然接受它。此外,如果我们发送卷曲来发送自定义标题,那么它将无法实现目的。
3)使用JavaScript加密和PHP解密。有些JS要enrypt和php函数来解密。 (通过使用隐藏表单元素输入) 这也是一个很好的方法,但我很难编辑源传递变量,我的意思是从div到服务器。
也使用了其他一些方法,但我认为所有上述方法都是最好的描述我的问题... 请理解,解决方案可能非常小或大,但我不太了解JavaScript那么精心制作。
答案 0 :(得分:0)
您需要nonce。
生成随机值并将其存储在会话变量中。
session_start();
$_SESSION['nonce'] = base64_encode(md5(mt_rand()));
将该值用作表单中的隐藏元素,或将其作为参数添加到AJAX URL。
<input type="hidden" name="nonce" value="<?php echo $_SESSION['nonce'] ?>"/>
将会话中存储的值与AJAX请求的值进行比较。如果失败则通知403浏览器错误。
session_start();
if ($_GET['nonce'] !== $_SESSION['nonce']) {
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
die('Forbidden. Please check your cookies and try again.');
}
仅在成功时更新页面。
new Ajax.Updater({success: 'ELEMENT ID'}, 'AJAX URL');
如果检测到错误,更新程序将失败并且不会进行任何更改。