Php 通过https获取参数的文件内容的安全性如何://

Php 通过https获取参数的文件内容的安全性如何://,php,security,file-get-contents,Php,Security,File Get Contents,我以以下方式使用“文件获取内容”: (例如,下面的脚本发布在……请注意URL是httpS) “checkdatabase.php”脚本使用_GET获取用户名和密码,并从URL获取变量,然后交叉引用这些登录详细信息以查看它们是否有效。如果是,则回显“是”,如果不是,则回显“否” checkdatabase.php脚本设置为仅在用户名、密码和密钥参数都已传递时运行,然后仅在已传递的密钥值与该php脚本中存储的密钥匹配时运行 在给定的时间跨度内,还将限制可输入“”的次数,以防止猜测用户/密码组合的

我以以下方式使用“文件获取内容”:

(例如,下面的脚本发布在……请注意URL是httpS)


“checkdatabase.php”脚本使用_GET获取用户名和密码,并从URL获取变量,然后交叉引用这些登录详细信息以查看它们是否有效。如果是,则回显“是”,如果不是,则回显“否”

checkdatabase.php脚本设置为仅在用户名、密码和密钥参数都已传递时运行,然后仅在已传递的密钥值与该php脚本中存储的密钥匹配时运行

在给定的时间跨度内,还将限制可输入“”的次数,以防止猜测用户/密码组合的“暴力”攻击

我的问题是,当两个URL都使用httpS时,上述方法的安全性如何


我应该加密发送的值吗?或者上面的内容已经安全了吗?

[UPDATE]在发表了一些评论之后,我意识到我读到并回答了你的问题太快了。我改变主意了

回答你的问题 HTTPS与您的私钥一样安全 除非攻击者能够访问私有SSL密钥,否则HTTPS是安全的。如果您的服务器曾经被破坏,那么HTTPS也是如此,直到您生成一个新密钥

宁可投递也不要投递 其次,如果您真的要使用HTTP来实现此目的,那么应该使用POST而不是GET

1) 语义上的原因:您要求另一个服务器做一些事情。该操作不是,但GET方法是(至少在理论上)。正如@Gumbo在评论中指出的,您只是在目标服务器上进行检查,而没有运行任何操作,因此关于幂等性的评论在这里不适用

2) 您的密码可能会显示在访问日志中。尽管默认情况下,不同的堆栈似乎以不同的方式处理HTTPS日志,但您不应该冒险假设GET请求最终会出现在某个日志文件中

您可以使用以下方式发布帖子:

不发布/存储纯文本密码 存储并发布加密密码 主数据库不应存储纯文本密码。而是在保存之前对其进行加密,然后在比较之前对提交的用户输入进行加密

使用共享公钥

您可以实现共享密钥,而不是发布纯文本usermame/password/secret。这与HTTPS使用的机制基本相同。使用此方法,您可以通过HTTP安全地发送此请求

仔细阅读,这很容易理解。使用

请在此处阅读关于最后一个的更多信息:

不同的方法 直接查询远程数据库 到目前为止,最简单的方法是在siteB上设置MysQL守护程序,以便只接受来自siteA的远程连接,并直接从siteA查询siteB数据库。这根本不涉及HTTP。只需确保您的MySQL密码是安全的,受IP限制,并且不存储纯文本密码

编写提供程序服务 来自维基百科:

[OAUTH]为最终用户提供授权第三方的过程 访问其服务器资源而不共享其凭据 (通常是用户名和密码对),使用用户代理 重定向

这是我发现的第一篇关于自己写作的文章:


您最好使用Zend Framework中的OAUTH组件或类似的组件,如果这是您要使用的路径。

TCP和HTTP之间的整个连接都应该加密,cURL是否可用,以便您可以执行POST请求?是的,cURL可用…但我不知道如何使用它,哈哈,这里有一个类似的问题线程,我会避免这样做,以确保不会生成可能包含查询字符串parametersErr的服务器日志。。只有当Wireshark正在进行连接的计算机上运行时(通过窃取会话密钥),或者如果您拥有HTTPS网站的私钥,才可能使用Wireshark解密内容。如果有人可以通过监听来解密HTTPS流量,这将完全破坏HTTPS的作用。@SecurityMatt,你显然是对的,不知道我在想什么。现在编辑答案。“检查”操作对我来说似乎相当幂等。
<?php
//there is a login form on this URL and the entries put in the form are used to set the username & password variables below.
$username = "someusername";
$password = "somepassword";
$secretkey = "slkd89087235";

$yesorno = file_get_contents("httpS://siteB.com/checkdatabase.php?username=$username&password=$password&secretkey=$secretkey");

if ($yesorno == 'yes') {
//details are valid, so something 
} else {
//details aren't valid, display they aren't valid
}
?>