gpt4 book ai didi

php - 如何更好地保护我的 php、jquery、ajax 请求免受恶意用户的攻击

转载 作者:行者123 更新时间:2023-12-03 22:12:59 26 4
gpt4 key购买 nike

我通过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 并直接调用它。或者,更难防范的是,通过欺骗登录用户单击导致该用户特定操作的链接来完成。

可以通过使用 session key 标记每个调用并确保其有效来阻止第一种类型。然而,这并不能阻止第二次。

好消息是,可以使用作为 URL 一部分的 secret 值来阻止此攻击,该值经常更改,并在后端记住足够长的时间以确保正确调用。我们在这里讨论 AJAX,因此最简单的方法是在整个页面加载时创建一个随机数 secret 值。对于传统形式也是如此,请记住这一点,并在创建新的 secret 值之前对旧的 secret 值进行检查。您将该值保存在 session 数据中,并将其附加到所有 AJAX 调用或后续页面的表单提交中。如果匹配,则为同一用户。如果没有,您只需忽略该请求。

每次用户加载一个全新的页面时,为该用户创建一个新的 key 。这意味着只有攻击者是用户,他们才能够找到该值。这意味着您已经击败了这种攻击类型。

跨站脚本:

XSS 攻击的不同之处在于,除其他外,它们是 CSRF 攻击的对立面。这个很容易。只需确保来自用户或数据库的所有数据都通过某个将 html 字符转换为实体的函数传递,例如 PHP 中的 htmlentities(),然后再将其显示在站点上。这样做的目的是防止用户使用 JavaScript 将用户重定向到操作链接或其他恶意内容。它还可以防止 Flash 和其他对象嵌入到页面中。

不幸的是,它还会阻止在评论或文章正文中使用任何 HTML。这可以通过非常严格的标签白名单或某些版本的替代代码来解决。 (如本网站使用的)

确实没有什么好的方法可以尝试创建黑名单。我试过了。我们都试过了。它们不起作用。

SQL注入(inject):

我不会在这里详细介绍,但是,足以说明上述攻击与它可能造成的损害相比根本不算什么。学习一下。

除此之外,您还应该遵循一些准则。例如,永远不要陷入相信发送到 JavaScript 的数据会按照您期望的方式返回的陷阱。假设最坏的情况。对于传统形式来说也是如此。无论您如何加密发送给用户的数据,都应将其视为来自用户的全新数据。

如果您有论坛帖子的编辑方法。检查提交是否用户有权编辑该帖子。确保他们已登录。确保密码匹配。确保他们输入的数据没有 SQL 注入(inject)。

执行这些操作,您将阻止绝大多数攻击。

不是全部。 FireSheep 使用的攻击类型仍然会成功,任何类似的针对用户而不是您的网站的攻击也会成功。您可以使用 https 而不是 http 来防御 FireSheep。但即便如此,也无法抵御各种针对用户的攻击。例如从他们的机器上窃取 session cookie,或者对其机器进行物理访问。

关于php - 如何更好地保护我的 php、jquery、ajax 请求免受恶意用户的攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com