Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的安全注释框_Php_Sql_Security_Insert_Comments - Fatal编程技术网

PHP中的安全注释框

PHP中的安全注释框,php,sql,security,insert,comments,Php,Sql,Security,Insert,Comments,我已经在我的网站上使用了一段时间的评论框功能,直到昨天我注意到一条奇怪的评论出现在我的网站上,看起来一点都不正常。我这里的问题是如何防止SQL注入攻击/恶意垃圾邮件等 我不是PHP方面的专家,我确信我的代码在安全性方面缺少了一些东西 我介绍了一些基本的验证函数来检查值是否为空、是否不包含滥用语言、是否具有一定的长度等 我还可以在下面的代码中改进什么,以使其对任何攻击都更加安全 <?php session_start(); require('execute.php'); if($_SER

我已经在我的网站上使用了一段时间的评论框功能,直到昨天我注意到一条奇怪的评论出现在我的网站上,看起来一点都不正常。我这里的问题是如何防止SQL注入攻击/恶意垃圾邮件等

我不是PHP方面的专家,我确信我的代码在安全性方面缺少了一些东西

我介绍了一些基本的验证函数来检查值是否为空、是否不包含滥用语言、是否具有一定的长度等

我还可以在下面的代码中改进什么,以使其对任何攻击都更加安全

<?php

session_start();
require('execute.php');

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(empty($_POST['name']))
{echo '<p style="color:red;"><b>Please provide a valid name</b></p>';}
else 
{
    $fn = mysqli_real_escape_string($dbc, trim($_POST['name']));
}

if(empty($_POST['comment']))
{echo '<p style="color:red;"><b>Please provide a valid comment</b></p>';}
else 
{
    $cm = mysqli_real_escape_string($dbc, trim($_POST['comment']));
}

$minimum_n = '/[a-zA-Z]{3,}/';
if(!preg_match($minimum_n, $_POST['name']))
{$_POST['name'] = NULL; echo '<p style="color:red;"><b>Your name is too short or has incorrect format</b></p>';}

$minimum_c = '/[a-zA-Z]{5,}/';
if(!preg_match($minimum_c, $_POST['comment']))
{$_POST['comment'] = NULL; echo '<p style="color:red;"><b>Your message is too short or in incorrect format</b></p>';}

    $pattern = '/(shit|crap|http|href)(s|ed|ing|ty|off)?/i'; /* Removed offensive words */
if(preg_match($pattern, $_POST['name']))
{$_POST['name'] = NULL; echo '<p style="color:red;"><b>You have chosen inappropriate nickname. Please use a different one</b></p>';}

if(preg_match($pattern, $_POST['comment']))
{$_POST['comment'] = NULL; echo '<p style="color:red;"><b>You have used inappropriate word(s) in your message</b></p>';}    

if(!empty($_POST['name']) && !empty($_POST['comment']))
{
    require('execute.php');
    $q = "INSERT INTO comment (name, comment, date)
    VALUES ('$fn', '$cm' ,NOW())";
    $r = mysqli_query($dbc, $q);
    mysqli_close($dbc);
}
}

?>

</div>

<div class="container_16 grid_8 alpha lefter">

<?php
session_start();
require('execute.php');
$q = "SELECT * FROM comment ORDER BY user_id DESC";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_array($r, MYSQLI_ASSOC))
{

     echo "<p>" . ''. "<b>" . ' ' . $row['id']. ' ' . $row['name'] . ' ' . "</b>". ' ' . $row['comment']. ' ' . $row['date'] . ' ' . "</br>";

}


?>

注意安全性:默认字符集

必须在服务器级别或使用 API函数mysqli_set_charset(),以使其生效 mysqli\u real\u escape\u string()。请参阅有关角色的概念部分 设置以获取更多信息


这就是php手册中关于mysqli_real_escape_字符串函数的内容。因此,请尝试使用mysqli_set_charset()函数设置适当的字符集。

我的execute.php文件中有这个;程序样式有两个属性,oo样式只有一个属性,因此可以使用$dbc->mysqli_set_charset('utf-8');或者mysqli_set_charset($dbc,'utf-8');mysqli_set_charset($dbc,'utf-8');是我从一开始就在代码中拥有的;但它似乎不够安全。还有其他建议吗?