所以我已经完成了创建数据库并使用php将数据插入其中,我一直在尝试进行SQL注入攻击和其他事情,看看我是否安全,但由于我不是专家,我希望检查我所做的就是安全和正确的方法。
我有这个(名称/变量已被修改)表单,当按下提交按钮时,函数insert()运行
<form action="" method="POST">
var1: <input type="text" name="var1"><br>
var2: <input type="text" name="var2"><br>
<input type="submit" value="Submit">
</form>
<php?
function insert() {
$connect = mysqli_connect("localhost","user","user","table");
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
mysqli_query($connect, "INSERT INTO column_name (var1, var2) VALUES ( '$var1','$var2'); ");
}
?>
我似乎无法注入具有此
的var1和var2的表单$var2 = '): DROP TABLE test --and several variants of this
从四处查看,我发现mysqli_query只接受一个查询,这就是为什么它不起作用。 如果我错了,请纠正我。
我的另一个想法是影响正在运行的PHP脚本, 通过使用此
注入表单$var2 = "'); "); mysqli_query($connect,"DROP TABLE test");//
问题:这种事情会发生吗?你运行时可以通过$ post方法影响PHP函数的地方吗?我环顾四周,找不到任何东西。是因为它不能吗?
任何研究论文,文章等等,如果我要求的是显而易见的话,我可以帮助看看,这将是值得赞赏的。)
编辑:我将添加准备好的声明来实现这个安全
答案 0 :(得分:1)
SQL注入使用union之类的命令在易受攻击的位置同时运行多个查询。您的表单容易受到攻击,因为您要么不使用任何类型的转义,也不要使用prepared statements。如果您的$var2
包含hi')
,该怎么办?这将逃脱括号并打开漏洞。此外,如果您只是$_POST['value']
并将其直接插入数据库,则会打开XSS vulnerability。
答案 1 :(得分:1)
Fisrt,使用准备声明:
$mysqli->prepare("SELECT Distinct FROM City WHERE Name=?");
$stmt->bind_param("s", $city);
$stmt->execute();
其次,使用filter_input方法,例如:
filter_input(INPUT_POST,'email',FILTER_EMAIL);
答案 2 :(得分:-1)
您不应该通过试图弄清楚如何利用您周围留下的数百种潜在安全漏洞来证明您的网站不受SQL注入攻击。
如果您想确保您的网站是安全的,只需采取适用的安全措施,例如使用准备好的声明。