【问题标题】:is my php code is okay to avoid sql injection [duplicate]我的php代码是否可以避免sql注入[重复]
【发布时间】:2021-08-16 08:31:12
【问题描述】:

我有一个非常旧的 php 应用程序,我正在避免这样的 sql 注入:这会避免 sql 注入吗?

<?php
$con = mysqli_connect($var['dbhost'],$var['dbuser'],$var['dbpass'],$var['dbname']); 
$text = $con -> real_escape_string(strip_tags(htmlspecialchars(trim(stripslashes($_POST['title'])))));
$class = $con -> real_escape_string(strip_tags(htmlspecialchars($_POST['class'])));
$join_back = $con -> real_escape_string(strip_tags(htmlspecialchars($_POST['join_back'])));
$heading = $con -> real_escape_string(strip_tags(htmlspecialchars($_POST['heading'])));
$serial =  $con -> real_escape_string(htmlentities(trim(addslashes($_REQUEST['serial']))));



$sql = "INSERT INTO site_data(admin_id,site_id,page_id,css_name,serial,data_title,data_code,data_type,time_added,visible_for,join_back,is_deleted)
 VALUES('".$uid."','".$sid."','".$pid."','".$class."','".$serial."','".$text."','".$html_data1."','text','".time()."','all','','no')";


if(mysqli_query($con,$sql))
{
    
header("location: show_data.php");
$db->close();
exit;
}
else
{
echo "<div style='border: 3px solid blue;margin:10px;padding:10px;' class='error' align='center'>Problem Occurred. Try again Later.</div>";
}
?>

【问题讨论】:

    标签: php html mysqli


    【解决方案1】:

    是的,real_escape_string 消除了将字符串直接嵌入到查询中所带来的潜在问题。

    从注入的角度来看,添加 strip_tags、htmlspecialchars、strilashes 等是多余的。我的意思是,如果你想删除任何 HTML 标记,你可以这样做,但它与 SQL 注入没有直接关系。

    如果您想采用更结构化的方法,我建议您开始研究prepared statementsparameterized queries

    开始from this great summary

    【讨论】:

    • 谢谢。 strip_tags、htmlspecialchars、stripslashes 用于 XSS
    • @LDB​​hatt 你应该在输出(仅到 HTML)而不是输入时使用那些。
    • real_escape_string 不是万无一失的,有一些情况会打败它,你一定要使用准备好的语句和参数
    • @LDB​​hatt strip_tags 和 stripslashes 不适用于 XSS。这些功能与安全无关。
    猜你喜欢
    • 2011-05-18
    • 2013-09-17
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多