php表单preg_match保护不需要的字符

时间:2015-09-16 13:29:28

标签: php forms

这是我的PHP代码,我想保护我的表单免受不必要的标记,例如

<a harf='http://anyweb.com'>Look </a> or 
<script> something here </script> or 
<?php header( "Location:tks.php" ); ?>

任何链接或代码发布到我的表单我试过但非常困难任何人都可以最短,并轻松保护我的表单免受不必要的链接和代码。 这里我试过的代码

<?
 $error="";
if(!empty($_POST)) 
    { 

if(empty($_POST['name'])){
    $error = 'Invalid name. Try again';
    }
elseif(empty($_POST['message'])){
    $error = 'Invalid message. Try again';
    }
elseif(preg_match('/http/',$_POST['name'])){
    $error = 'Invalid content message. Try again';
    }
elseif(preg_match('/http/',$_POST['message'])){
    $error = 'Invalid content message. Try again';
    }
elseif(preg_match('/</',$_POST['name'])){
    $error = 'Invalid content message. Try again';
    }
elseif(preg_match('/</',$_POST['message'])){
    $error = 'Invalid content message. Try again';
    }
else {  
$name = $_POST['name'];
$message = $_POST['message'];

//include('sqlconnect.php');
//$sql = "INSERT INTO msg (name, message, date)VALUES ('$name', '$message', 'now()')"; 
//mysql_query($sql) or die(mysql_error());

header( "Location:tks.php" );
exit;
}
}
?>

3 个答案:

答案 0 :(得分:1)

您可能需要查看PHP内置的环境过滤器:http://php.net/manual/en/filter.filters.sanitize.php

所以也许这样的事情可以解决问题:

if ($_POST['message'] != filter_var($_POST['message'], FILTER_SANITIZE_STRING) {
    $error="Try again";
}

答案 1 :(得分:0)

阅读本文:http://php.net/manual/ru/function.htmlspecialchars.php 它可以保护您的网站免受脚本,标签等的侵害 此外,如果你想要阻止链接尝试这个: 链接演示:https://regex101.com/r/fV3pO3/1 标签演示:https://regex101.com/r/iQ5lH9/1

答案 2 :(得分:0)

保护您发布的数据不受原始HTML的影响,可能在插入数据库之前,您可以使用strip_tags删除标记,如下所示:

$name = strip_tags($_POST['name']);
$message = strip_tags($_POST['message']);