防止来自XSS的数组

时间:2016-05-16 13:49:22

标签: arrays xss

我有这个来保护免受xss

HTML //

<input class="form-control"  type="text" name="pc_accesoires[]">

/// PHP

$pc_acc = $_POST["pc_accesoires"];
$accesoires = array();
  foreach($pc_acc as $key => $value){
  $accesoires[] = $value; 
}

在我准备好sql将$ accesoires插入表后,一切正常,没有sql注入,但这段代码容易受到XSS攻击

我如何保护这个变量?我试过htmlentities&amp; htmlspecialchar我收到错误是因为htmlentities&amp;&amp; htmlspecialchar接受一个字符串但不接受数组

2 个答案:

答案 0 :(得分:0)

使用函数迭代对象,检查它是否是数组,并相应地进行清理。这样的事情应该有效:

function htmlspecialchars_obj(&$variable)
{
    foreach ($variable as &$value)
    {
        // Check if item is an array or object, if so call this function recursively.
        if (is_array($value) || is_object($value))
        {
            htmlspecialchars_obj($value);
        }
        else
        {
            // Otherwise, sanitize this item and continue iteration.
            $value = htmlspecialchars($value);
        }
    }
}

注意:这会通过引用传递并修改您提供的参数,而不是返回已编辑的副本。

以下是如何使用该功能的示例:

// Initialise an array/object (whatever needs to be protected).

$myVariable = array();
$myVariable['xss'] = "<script>alert('xss attack');</script>";
$myVariable['noxss'] = "Just a plain string.";

// Use the function:

htmlspecialchars_obj($myVariable);

// Now $myVariable is safe to print:

foreach($myVariable as $key => $value){
   print($value); 
}

以下是使用您提供的代码的示例:

    $pc_acc = $_POST["pc_accesoires"];

    htmlspecialchars_obj($pc_acc);

    $SQLInsertReq = "INSERT INTO maintenance (pc_accesoires) VALUES ( ? )";

    $InsertRerSTMT = $connect->stmt_init();

    if(!$InsertRerSTMT->prepare($SQLInsertReq)){

         $ro = $InsertRerSTMT->error;

         echo $ro;

         exit();
    }
    else {

      $accesoires = mysqli_real_escape_string($connect, $accesoires);

      $accesoires = implode(',', $accesoires)

      $InsertRerSTMT->bind_param('s', $accesoires);

      $InsertRerSTMT->execute();
   }


    function htmlspecialchars_obj(&$variable)
    {
        foreach ($variable as &$value)
        {
            // Check if item is an array or object, if so call this function recursively.
            if (is_array($value) || is_object($value))
            {
                htmlspecialchars_obj($value);
            }
            else
            {
                // Otherwise, sanitize this item and continue iteration.
                $value = htmlspecialchars($value);
            }
        }
    }

答案 1 :(得分:0)

很好,我确保我的田地安全了

    $pc_acc = $_POST["pc_accesoires"];

    $accesoires = array();
    foreach($pc_acc as $key => $value){
        $accesoires[] = htmlspecialchars($value);
    }

这么简单!!!!!!!