我有这个来保护免受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接受一个字符串但不接受数组
答案 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);
}
这么简单!!!!!!!