Php 将$\u POST值与数据库字段进行比较

Php 将$\u POST值与数据库字段进行比较,php,mysql,Php,Mysql,我很确定这段代码有问题: $sql="select * from user where username={$_POST['username']}AND pwd= {$_POST['password']}"; $r = mysqli_query($link,$sql); if($r) { $_SESSION['loggedin']=true; echo "Welcome". $_POST['username']; } 是的,您暴露于SQL注入。请了解Prepred声明 此外,您显然

我很确定这段代码有问题:

$sql="select * from user where username={$_POST['username']}AND pwd=   {$_POST['password']}";

$r = mysqli_query($link,$sql);
if($r)
{ 
$_SESSION['loggedin']=true;

echo "Welcome". $_POST['username']; 
}

是的,您暴露于SQL注入。请了解Prepred声明

此外,您显然以明文形式存储密码。这是一个安全风险,因为如果您的数据库被暴露(由于SQL注入攻击,例如咳嗽),您的所有密码都可能被泄露

几个链接:


SQL。注射。还有XSS…纯文本的SQL注入和密码?这是一个非常简洁的例子,正好说明了不应该做什么。五行代码中有三个巨大的危险。@pd4627简单的回答是你做的每件事都错了。请阅读马德拉的回答。@ColeJohnson是的,如果是一篇博文的话。我只希望我们能将职位提升(或者从技术上说,降级)到那个名单上。另一方面,@tadman,您的意思是
eval('md5({$\u POST[\'password\']}”)不是散列密码的正确方法!?伙计,我做错了。
mysqli
实际上支持占位符,所以修复这部分应该很容易。@tadman:它支持占位符的事实很有帮助。但是你必须使用它,你知道:)而且对准备好的语句的任何驱动程序支持都不会保存此人的数据库密码或XSS问题:D.至少它不需要重新编写一些可怕的基于
mysql\u查询的系统。Madara Uchiha是正确的。您还忘了获取查询。