是否可以像这样发布isset密码?
我认为它应该是if(isset($_POST['username']) && isset(md5($_POST['password'])))
- 因为它将其加密发布,但是如果我将md5包装在密码周围w / i条件,它就无法正常工作。
if(isset($_POST['username']) && isset($_POST['password'])) {
//run authentication
} else {
//show form
}
答案 0 :(得分:1)
修改强>:
另外,运行以下内容,看看你得到了什么:
<?php echo md5(NULL);
因此,md5 总是返回一个值。
最重要的是尝试运行以下内容:
<?php var_dump(isset(md5($_POST['password'])));
您会看到以下内容:Fatal error: Can't use function return value in write context
isset()只能与变量一起使用。
修改强>
hashing和encryption之间存在差异。 MD5是一个简单的哈希,甚至不是加密安全的。
是的,您不应该以明文方式向您的服务器提交密码,但是客户端的哈希是同样的东西。您应该使用HTTPS来提交密码表单,这就是加密服务器与客户端之间通信的方式。
答案 1 :(得分:1)
的全部目的
if(isset($_POST['username']) && isset($_POST['password'])) {
检查两个POST参数是否都已设置/可用。没有涉及身份验证,甚至没有关于两个元素类型的假设(可能是字符串,数组,......)。只有“请求中有这样的参数”和“我可以在不提出通知的情况下访问此元素:未定义的索引”。
不要将其与isset(md5($_POST['password']))
进行比较
md5()接受一个字符串,所以md5($ _ POST ['password'])做了两个假设
a)有一个元素$ _POST ['password'],这是“原始”测试检查的内容
b)(字符串)$ _ POST ['password']是有道理的,因为无论你传递给md5()的是什么都被强制转换为字符串。如果传递数组,则结果与md5('Array')相同;
另外,md5()总是返回一个字符串(输入的哈希的字符串表示),因此isset()总是为真,并且在那里没有多大意义。 (编辑:将永远为真,如果isset()可以与函数的返回值一起使用。但它不能,请参阅注释)
底线; “原始”版本提供“明确定义”的目的,isset(md5(..))版本不是那么多; - )
答案 2 :(得分:-2)
如果字段位于提交的表单中,则这些值始终为isset
。您可能想要检查的是它们是否为空。一种简单的方法是与空字符串进行比较,但这需要您首先检查变量是否已设置,否则,当表单尚未提交时,您将获得“数组键不存在”警告。值得庆幸的是,有一个名为empty()
的方便方法,用于检查给定变量是否已设置和是否具有非假值 - 因此您通常需要检查某些内容是否为不为空。
$x = "";
!empty($x); // false
isset($x); // true :(
// beware though:
$x = "0";
!empty($x); // false
将其视为此的简写:
isset($x) && $x != false