我通过jquerys getJSON方法发送了大量数据,一个函数的例子是
function doSomething(sid){ if(sid){ $.getJSON("ajax/ajaxDoSomething.php",{sid:""+sid+""}, function(data){ //alert(data); if(data.success == true){ $('#add_vote_div').html('vote received'); $('#list_data_div').html(data.html); } else{ $('#add_vote_div').html(data.message); } }); } }`
问题是任何人都可以查看源代码并查看发送GET数据的php文件的位置,因此您可以将浏览器指向该位置并将数据附加到URL.我检查数据以确保其正确的数据类型,但我不希望用户能够转到网址.
我想也许把所有的ajax文件放在主文档根目录后面会起作用但是jquery不能链接到绝对路径之类的
$.getJSON("var/www/ajax/doSomething.php",{sid:""+sid+""}
(主文件根目录是var/www/html /)
如果他们制作了一个更好的$ .postJSON,但它不存在,任何想法?
您需要做的是针对几种特定类型的攻击.即使是非常引人注目的网站,这通常也足够了.对于一个不是最大的网站之一的网站,这些东西应该足以阻止脚本小子.
从本质上讲,这是您在初始帖子中试图指出的内容.正如您所指出的那样,这种攻击所需要的是,找出可以实现某些特定于用户的操作并直接调用它的URL.或者,更难以防范,通过欺骗登录用户点击导致该用户特定操作的链接来完成.
可以通过使用会话密钥标记每个呼叫并确保其有效来阻止第一种呼叫.但是,这不能阻止第二个.
好消息是,这个攻击可以通过一个秘密值来停止,这个秘密值是url的一部分,经常更改,会在后端记住足够长的时间以确保它被正确调用.我们在这里讨论AJAX,所以最简单的方法是在整页加载时创建一个随机数密码值.对于传统表单也是如此,记住这一点并在创建新的秘密值之前检查旧的秘密值.您在会话数据中保存此值,并将其附加到所有AJAX调用或从后续页面中提交提交.如果匹配,则它是同一个用户.如果没有,您只需忽略该请求.
每次用户加载整个新页面时,都会为该用户创建一个新秘密.这意味着只有攻击者是用户,他们才能找到这个值.这意味着你已经击败了这种攻击类型.
XSS攻击的不同之处在于它们是CSRF攻击的另一面.这个很容易.只需确保来自用户或数据库的所有数据都通过某些函数传递,该函数会将html字符转换为其实体(如htmlentities()
PHP),然后再在您的站点上显示.这样做会阻止用户使用JavaScript将用户重定向到操作链接或其他恶意内容.它还可以防止flash和其他对象嵌入到页面中.
不幸的是,它还会阻止在评论或文章正文中使用任何HTML.这可以使用非常严格的白色标签列表或替代代码的某些版本.(比如本网站使用)
确实没有好方法可以尝试创建黑名单.我试过了.我们都试过了.它们不起作用.
我不会在这里详细说明,但是,足以说上述攻击与这可能造成的伤害相比毫无意义.了解它.
除此之外,您应遵循一些指导原则.比如永远不要陷入相信你发送到javascript的数据将会回归你期望的陷阱.假设最坏的情况.传统形式也是如此.无论您如何加密,都应该处理发送给用户的数据,就好像它是来自用户的全新数据一样.
如果您有论坛帖子的编辑方法.检查提交用户是否有权编辑该帖子.确保他们已登录.确保密码匹配.确保他们输入的数据没有SQL注入.
做这些事情,你就会停止绝大多数攻击.
不是所有的人.FireSheep使用的攻击类型仍然可以通过,针对用户而不是您的站点的任何类似攻击也会通过.您可以使用https而不是http来防范FireSheep.但即使这样也无法抵御各种用户定位攻击.比如从他们的机器上窃取会话cookie,或者对他们的机器进行物理访问.