如何从控制台保护javascript函数?

时间:2017-09-11 14:57:39

标签: javascript jquery

我有一个名为' delete'像这样:

<div onclick="delete($post_id, $_SESSION['id']">somelink</div>
function delete(post_id, session_id) {
  var p_id = post_id;
  var s_id = session_d;

  $.ajax({
    url:"delete.php",
    type:"POST",
    data: {  
      p_id: p_id,
      s_id: s_id
    },
  });
})

delete.php是一个删除从用户id = s_id添加的post = p_id的页面。

我的问题是,任何用户在输入功能时都可以删除任何帖子,只需输入控制台&#39; delete();&#39;用参数调用并删除帖子!

请提出任何想法。

3 个答案:

答案 0 :(得分:2)

你做不到。你也不应该。

您应始终假设来自客户端的数据已损坏,应予以相应处理。这包括表单数据,或者在这种情况下,包括AJAX请求。

这意味着你必须在服务器端应用验证,让PHP为你做。例如:限制每X时间可以删除的帖子数量。并仔细检查帖子实际上属于删除帖子的人。

你不能这样做的原因是因为你创建的是客户端的javascript。如果您创建一个函数来阻止更改代码,客户端可以更改其计算机上的代码 以忽略它。您可以创建一个函数来检查要检查的功能是否已更改,但是再次;客户可以改变它。

答案 1 :(得分:-1)

不幸的是,你不能。你需要确保的是在服务器上使功能安全,简单来说,归结为

  1. 验证服务器上的每个请求和输入参数,以便人们无法从客户端操作或更改服务器端数据。
  2. 确保您发送到客户端的所有数据也来自服务器。 阻止从客户端调用函数的方法之一是不要在全局范围中公开您的方法。并记住,如果您的代码非常关键且重要,请始终将其移至服务器端。使用编程解决方法来解决应用程序设计问题并不是一个好习惯。如果程序设计正确,从客户端调用函数不应该是一个问题。

答案 2 :(得分:-2)

首先,这是不好的。你应该有身份验证。

但是,你可以这样做:

(function() {
  $('#BUTTON_ID').on('click', function(post_id, session_id) {

    var p_id = post_id;
    var s_id = session_d;

    $.ajax({
      url:"delete.php",
      type:"POST",
      data: {  
        p_id: p_id,
        s_id: s_id
      },
    });
  })
})();

并添加“BUTTON_ID”作为按钮的ID。

即便如此,它仍然不安全

通过这种方式,您无法从控制台调用删除。但是有人可以查看源代码并复制你的ajax调用并将其粘贴到他的控制台中它会起作用。这不是阻止人们删除帖子的好方法。

您应该阅读有关Web应用程序安全性的信息。您应该拥有一个在x时间后过期的令牌的身份验证过程。令牌将对用户进行身份验证,您可以在此处检查用户是否有权删除帖子。如果用户没有权限,则不显示该按钮。然后,如果用户从控制台调用它,他将从后端服务器收到错误。