Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP传递URL参数_Php_Md5 - Fatal编程技术网

用PHP传递URL参数

用PHP传递URL参数,php,md5,Php,Md5,我正在创建一个与web服务器上的PHP脚本通信的程序,为此,我需要能够将参数从程序传递到PHP脚本 现在是我的问题。在某些时候,需要将用户名和密码传递给脚本。现在,这并不是以用户显而易见的方式(比如在地址栏中)完成的,但我知道,如果有人真的想找出答案,只要稍微嗅嗅一下就可以了。因此,虽然我的脚本不会被注入,但显然变量篡改是一个问题 这是我想出的一个主意,所以请帮我想一想,看看这是否会像我认为的那样起作用 我的想法是在发送之前在客户端加密用户密码(或另一个唯一密钥)变量,这样就可以得到一个类似于(

我正在创建一个与web服务器上的PHP脚本通信的程序,为此,我需要能够将参数从程序传递到PHP脚本

现在是我的问题。在某些时候,需要将用户名和密码传递给脚本。现在,这并不是以用户显而易见的方式(比如在地址栏中)完成的,但我知道,如果有人真的想找出答案,只要稍微嗅嗅一下就可以了。因此,虽然我的脚本不会被注入,但显然变量篡改是一个问题

这是我想出的一个主意,所以请帮我想一想,看看这是否会像我认为的那样起作用

我的想法是在发送之前在客户端加密用户密码(或另一个唯一密钥)变量,这样就可以得到一个类似于(显然是虚构的)mypage.php的url?un=Oa348uty8&ps=op986hGTfreu,然后当它到达php脚本时,解密它并用另一种盐再次加密它

因此,当它离开应用程序时,它将被加密,但不是正确的方式,然后当它点击PHP脚本服务器端时,将其解密并使用正确的salt对其重新加密,以便正确匹配存储的加密密码


这样,用户将不知道密码的加密版本应该是什么样子,否则他们将无法篡改URL并尝试插入假值。

您的方法的问题不在于您是否在URL中使用加密密码和用户名。如果用户通过向您发送加密字符串进行身份验证,那么作为攻击者,我仍然可以嗅出这些散列,将它们传递给您的应用程序并进行身份验证。除非这样,否则您必须先进行一些公钥/私钥交换,但这只是重新实现HTTPS,所以您最好只使用HTTPS

您应该做的是使用POST over HTTPS发送请求

  • POST:这样身份验证详细信息就不会出现在URL中,并显示在日志和参考URL中
  • HTTPS,以便整个请求的内容完全加密,并且只能由客户端应用程序和服务器端解密

从客户端到服务器的Javascript加密只能防止非SSL发布失败。 我认为您必须使用而不是这种类型的加密。

更新:
您可以在这两个脚本中添加自己的密钥。

简而言之,您考虑的是:

在服务器端,您有:

  • 具有登录名/密码匹配项的数据库
  • 一个脚本,它接受两个参数(密码和用户名),并在数据库中检查这对夫妇是否存在
您的问题:


当本地应用程序在服务器端调用php脚本时,这两个参数以纯文本形式给出。您希望避免篡改(如果您的脚本可以安全地防止注入,我只看到用于强制验证的篡改,这与正常登录情况有什么不同?如果您有可用的加密,请使用正常、正确的方式。当您将密码作为哈希字符串存储在服务器上时,您无论如何都应该这样做。(如sha256或类似内容)然后最好生成散列客户端,并仅将散列传输到服务器。其余为简单的字符串比较。无需解密。提供给URL的加密密码不能由人解密。但是,它可以按原样重新使用(即加密)黑客通过另一个连接。我试图避免的是有人能够操纵数据。因此,如果参数从应用程序传递到PHP,并且有人嗅出,他们就不能获取这些参数并在web浏览器中调用脚本来操纵它们。但是,既然问题可以安全、轻松地解决,为什么要这么做呢使用HTTPS解决问题?因为有时您不想使用HTTPS(HTTPS就是我所说的SSL)或无法使用它(例如:您租用了一个不允许HTTPS的Web空间).https需要Certificates,如果您不想为签名证书付费,并且应用程序在公共浏览器中运行,您将收到一条丑陋的消息,告诉您接受自签名certificate。使用另一种方法可以避免这种情况。但如果您使用自定义客户端,并且可以在服务器端激活https,我完全同意你应该使用https,而不是实现你自己的安全方法。谢谢你,这给了我一些想法,并为我指明了正确的方向!顺便说一句,我在mt数据库上不使用md5,但按照我最初的思路,第一个散列需要是可逆的。很高兴我能帮助你。仅供参考,md5散列不是可逆的(事实上,没有一个哈希是可逆的),它只是比其他哈希具有较低的安全性和避免冲突的能力。这意味着它比其他哈希更容易被破坏(例如使用rainbow表)。