php - ماهو - كيفية منع حقن سكل مع تابلنامس ديناميكية؟




sql injection ماهو (2)

من أجل الإجابة على كيفية إصلاح الشفرة فعليا:

'...FROM `' . str_replace('`', '``', $tableName) . '`...'

هذا مكررة كل باكتيكس في اسم الجدول (هذه هي الطريقة التي يتم الهروب في ميسكل).

شيء واحد لست متأكدا منه، هو ما إذا كان هذا "ترميز آمنة" (كيف يمكن للمرء أن يطلق عليه بشكل صحيح؟). واحد يوصي عادة mysql_real_escape_string بدلا من addslashes ، لأن الأول يأخذ ترميز اتصال الخلية في الاعتبار. ربما هذه المشكلة تنطبق هنا أيضا.

كان لي هذا النقاش مع سمعة عالية فب الرجل:

بيدو لا فائدة هنا. وكذلك mysql_real_escape_string. نوعية رديئة للغاية.

هذا بالطبع بارد، ولكن أنا بصراحة لا أعرف ما هو الخطأ مع اقتراح استخدام mysql_real_escape_string أو بدو لإصلاح هذا الرمز:

<script type="text/javascript">
    var layer;

    window.location.href = "example3.php?layer="+ layer;

    <?php
        //Make a MySQL connection
        $query = "SELECT Category, COUNT(BUSNAME)
          FROM ".$_GET['layer']." GROUP BY Category";
        $result = mysql_query($query) or die(mysql_error());

في هذا

$layer = mysql_real_escape_string($_GET['layer']);
$query = "SELECT Category, COUNT(BUSNAME)
FROM `".$layer."` GROUP BY Category";

، مع الأخذ في الاعتبار أن شفرة جافا سكريبت تحصل على إرسال العميل.


للسجل، وهنا نموذج التعليمات البرمجية لتحديد هذا الثقب.

$allowed_tables = array('table1', 'table2');
$clas = $_POST['clas'];
if (in_array($clas, $allowed_tables)) {
    $query = "SELECT * FROM `$clas`";
}




sql-injection