有没有办法对最终用户隐藏javascript函数?

有没有办法对最终用户隐藏javascript函数?,javascript,html,ajax,function,Javascript,Html,Ajax,Function,例如,我想使用jqueryajax调用 function addnewteacher(){ $.ajax({ type: "POST", url: "/actions/dboss/newteacher.php", data: "uname=" + $("#newteacheruname").val() + "&upass=" + $("#newteacherupass").val() + "&name=" +

例如,我想使用jqueryajax调用

function addnewteacher(){
      $.ajax({
          type: "POST",
          url: "/actions/dboss/newteacher.php",
          data: "uname=" + $("#newteacheruname").val() + "&upass=" + $("#newteacherupass").val() + "&name=" + document.getElementById("newteachername").value + "&surname=" + document.getElementById("newteachersurname").value + "&mobile=" + document.getElementById("newteachermobile").value + "&email=" + document.getElementById("newteacheremail").value,
          success: function(html){
              $("#response").html(html);
              $("#response").dialog("open");
          }
      });
  }
如您所见,我必须将数据部分提供给最终用户。但我想用一个隐藏函数对其进行加密,然后在服务器上对其解密,这样可能就不会有人向服务器发送恶意代码,因为如果没有正确加密,解密后的代码将毫无意义。但是我必须对用户隐藏这个函数,或者让这个函数只为我工作


谢谢你的帮助/想法

不,对不起,不可能。您在javascript中输入的所有内容最终都将对用户可见。无论你多么努力地缩小/混淆代码,只要安装就足够了,密码就会像气球一样在用户眼中弹出。

不。你可以通过缩小代码之类的东西来混淆它们,但你永远不要认为你的javascript是不可读的


您需要在服务器端验证和清理任何用户提交的数据。

您不能隐藏JavaScript代码。它被下载到客户端并在那里执行。你可以混淆它,把它推到深处,不管你想要什么,但是一个有决心的用户仍然可以找到它。您的安全性确实需要在服务器上,在服务器上您可以完全控制,而不是在客户机上,在客户机上您完全没有控制权


确保对
/actions/dboss/newteacher.php
的调用得到授权,并验证它们来自服务器上的有效源。模糊的安全性不是安全性。

你可以使用谷歌之类的工具来混淆Javascript代码,但我真的想知道为什么你首先需要隐藏它,因为它们会弄乱自己的数据。只要您不依赖于数据对服务器端功能的有效性(例如将输入直接注入SQL),您就应该可以了。

JavaScript所做的一切都可以由用户完成。即使你认为没有人会理解你的代码,他也不必理解。他可以直接执行它,看看它能带来什么。JavaScript只应被用作使UI更方便的一种方式,而不是保护任何东西。基本上,您不希望在JavaScript中写入密码,并在用户键入密码时将其签入此处,而是希望将写入的密码发送到服务器,并显示“是”或“否”。如果使用JavaScript检查表单,则必须在服务器端重新检查表单,因为JavaScript可能被禁用,等等。JavaScript本身是不安全的(当然作为客户端语言)。

您应该尝试隐藏密钥,而不是对内容进行签名的函数

我见过很多JS系统都是这样做的:

<script>// Runs first
(function () {
  // Look for a key in the URL like 'http://mysite.com/my/path?my=params#;key=abcd...
  var key = document.location.hash.match(/;key=([^;]+)/)[0];
  // Make sure other code on the page can't retrieve the key.
  // This is analagous to a program zeroing out its argv to prevent
  // key retrieval via /proc.
  document.location = "#";  // Does not cause reload.

  // define signature algo and export to whatever scope is appropriate.
  ...
})();
</script>
//首先运行
(功能(){
//在URL中查找一个键,如'http://mysite.com/my/path?my=params#;key=abcd。。。
var key=document.location.hash.match(/;key=([^;]+)/)[0];
//确保页面上的其他代码无法检索密钥。
//这对于程序调零其argv以防止
//通过/proc检索密钥。
document.location=“#”;//不会导致重新加载。
//定义签名算法并导出到适当的范围。
...
})();

显然,这只适用于一次性键。

因为您使用的是jQuery,所以可以将
document.getElementById(“newteachername”).value
等调用替换为
$(“#newteachername”).val()
无论您如何混淆它,任何有firebug的人都可以看到表单post。顺便说一句,您应该将代码链接起来:
$(“#response”).dialog(“open”);
因为现在,您让它搜索两次#response(与#newteacherupass相同,但您必须将其存储在一个变量中,因为您无法链接)。加密应用于防止窃听,而不应用于检查数据的来源。这就是签名的目的:。如果您希望服务器能够检查邮件是否来自受信任的客户端,则您需要签名,而不是加密。+1表示第一次正确完整的回答,而不是发布简短的消息在窗口中进行irst和编辑。:)