php - {} 在 php 中包裹我的变量是否会降低 sql 注入风险?
问题描述
我正在使用 php 和 mysql 为一个简单的登录页面编写一段代码,因此试图自己进行渗透测试,我在查询中使用花括号将变量 $password 和 $username 括起来,它完全阻止了我绕过它的尝试。
我知道我可以使用mysqli_real_escape_string和准备好的语句,并且我没有询问如何在这里保护我的代码,我想以这种方式检查它并知道黑客如何渗透这个确切的代码。我尝试传递' or 1=1 -- -
,就像变量周围没有大括号但它没有工作也尝试}' or 1=1 -- -
但无法绕过它。所以问题是大括号增强了安全性?如果不是,注入的有效载荷是什么
下面的代码是我用来连接我的数据库的代码。
<?php
if(isset($_POST['login'])){
$connection=mysqli_connect('localhost','root','','users');
$username=$_POST['username'];
$password=$_POST['password'];
$query="SELECT * FROM users WHERE username='{$username}' AND password='{$password}'";
$select_user_query=mysqli_query($connection,$query);
$select_user_result=mysqli_fetch_result($select_user_query);
if(!$select_user_result){
die("Username not found");
}else{
echo "logged in"
}
解决方案
不,它容易受到 SQL 注入的攻击。
使用准备好的语句,最好使用 PDO 而不是 mysqli:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status=:status');
$stmt->execute(['email' => $email, 'status' => $status]);
$user = $stmt->fetch();
有关更多信息,请参阅这个很棒的资源https://phpdelusions.net/pdo#prepared
在此处了解 SQL 注入https://www.owasp.org/index.php/SQL_Injection
推荐阅读
- javascript - 重命名拍摄的世博会照片
- angular - 在我的所有 html 文件中,自己的对象中都不存在 IONIC 属性
- python - Python - 按像素位置拆分 pdf 或 powerpoint?
- c - 找到序列中的最大值
- c# - 当我在远程服务器中使用微型 url 下载方法但它在本地工作时,无法连接到 C# 中的远程服务器异常
- java - 有没有办法在不向其侦听器触发值更改事件的情况下更改 Java 属性?
- python - 在 Whatapp 中检查人们是否在线或离线 - Python Selenium
- php - Carbon 将记录分为周和月
- google-cloud-pubsub - 关闭 Google Cloud PubSub 客户端并在未来运行
- reactjs - Github头像设置在我自己的项目资料图片中