此代码易受SQL注入攻击。如何改善它以防止注射?如何通过注射测试此代码? 这是我的代码:if(isset($ _POST ['name'])){$ name = $ _POST ['name']; }
if (isset ($_POST['name'])) {
$name = $_POST['name'];
}
if (isset ($_POST['remarcs'])) {
$remarcs = $_POST['remarcs'];
}
if (isset ($_POST['test_res'])) {
$test_res = $_POST['test_res'];
}
if (isset ($_POST['address'])) {
$address = $_POST['address'];
}
if (isset ($_POST['date'])) {
$date = $_POST['date'];
}
if (isset ($_POST['phone_num'])) {
$phone = $_POST['phone_num'];
}
if (isset ($_POST['illness'])) {
$illness = $_POST['illness'];
}
if (isset ($_POST['echo'])) {
$echo = $_POST['echo'];
}
if (isset ($_POST['pe'])) {
$pe = $_POST['pe'];
}
if (isset ($_POST['pmhx'])) {
$pmhx = $_POST['pmhx'];
}
if (isset ($_POST['pshx'])) {
$pshx = $_POST['pshx'];
}
if (isset ($_POST['habbits'])) {
$habbits = $_POST['habbits'];
}
if (isset ($_POST['occup'])) {
$occup = $_POST['occup'];
}
if (isset ($_POST['allergy'])) {
$allergy = $_POST['allergy'];
}
//Check file is uploaded or not
//if (isset($_FILES['file']['name']) && $_FILES['file']['name']!='' && $_FILES['file']['error']=='') {
//$path2 = ... ;
//move_uploaded_file(...);
if(is_uploaded_file($_FILES["file"]["tmp_name"]))
{
$path = "../uploads/".$_FILES['file']['name'];
move_uploaded_file($_FILES["file"]["tmp_name"], $path);
$new_path = "./uploads/".$path;
}
else{
$new_path = $_POST['org_path'];
//$path2 = "../uploads/".$_FILES['echo_photo']['name'];
}
//move_uploaded_file($_FILES["file"]["tmp_name"], $path);
//$new_path = $path;
$sql="UPDATE $tbl_name SET
name = '$name',
echo_files = '$new_path',
remarcs = '$remarcs',
test_res = '$test_res',
date = '$date',
address = '$address',
phone_num = '$phone',
illness = '$illness',
echo = '$echo',
pmhx = '$pmhx',
pshx = '$pshx',
habbits = '$habbits',
occup = '$occup',
allergy = '$allergy',
pe = '$pe'
WHERE id = ".$id;
$result=mysqli_query($con,$sql) or die('Unable to execute query. '. mysqli_error($con));
答案 0 :(得分:0)
1)您可以使用Prepared Statements
准备好的语句或参数化语句用于高效安全地执行语句。例如:PDO
2)对于高级强化技术,您可以参考OWASP SQL Injection Prevention
答案 1 :(得分:0)
这是我的建议。 使用正则表达式检查变量值。
例如
如果字段需要整数,请检查它是否是整数(仅整数)。
如果是字符串,请检查它是否只是字母数字。
如果您将文件上传到服务器,请不要授予其执行权限。
检查值的长度。
使用addslashes来转义单引号。
使用mysqli_real_escape_string。
使用mysqli预处理语句 使用htmlentities
总体而言,允许变量仅包含您认为应该包含的内容。
等。
在所有这些事情之后,你应该在sql查询中考虑一个变量。