- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过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。这可以通过非常严格的标签白名单或某些版本的替代代码来解决。 (如本网站使用的)
确实没有什么好的方法可以尝试创建黑名单。我试过了。我们都试过了。它们不起作用。
我不会在这里详细介绍,但是,足以说明上述攻击与它可能造成的损害相比根本不算什么。学习一下。
除此之外,您还应该遵循一些准则。例如,永远不要陷入相信发送到 JavaScript 的数据会按照您期望的方式返回的陷阱。假设最坏的情况。对于传统形式来说也是如此。无论您如何加密发送给用户的数据,都应将其视为来自用户的全新数据。
如果您有论坛帖子的编辑方法。检查提交是否用户有权编辑该帖子。确保他们已登录。确保密码匹配。确保他们输入的数据没有 SQL 注入(inject)。
执行这些操作,您将阻止绝大多数攻击。
不是全部。 FireSheep 使用的攻击类型仍然会成功,任何类似的针对用户而不是您的网站的攻击也会成功。您可以使用 https 而不是 http 来防御 FireSheep。但即便如此,也无法抵御各种针对用户的攻击。例如从他们的机器上窃取 session cookie,或者对其机器进行物理访问。
关于php - 如何更好地保护我的 php、jquery、ajax 请求免受恶意用户的攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193825/
这个问题在这里已经有了答案: The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain
这个恶意 javascript 代码到底在做什么? (function () { var qk = document.createElement('iframe'); qk.src =
我的 JavaScript 代码是否可以在运行时被(恶意)用户编辑,即使它已上传到网络托管站点? 例如,如果我在脚本中声明一个变量,如下所示: var myvalue = 2; 我想知道是否可以编辑为
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
例子: if($('#' + untrusted_js_code).length) > 0 ....` 通常“untrusted_js_code”应该是表示项目 ID 的简单字符串。变量的值来自
我不确定这是 StackOverflow 还是更多的程序员问题,但这里的其他几个人也提出了类似的问题。 在扫描我的 Google Analytics 帐户时,我注意到一些退出链接标记有查询字符串: ?
我正在开发一个 servlet(在 tomcat 上运行),它接收包含 Java 脚本代码的请求,并使用 java 脚本 API 框架评估/运行代码并将答案返回给用户。 由于我们处理的是用户生成的代码
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是一名优秀的程序员,十分优秀!