Php 预匹配包括正斜杠
这是我的功能,用于检查输入的安全问题和/或答案是否包含恶意字符:Php 预匹配包括正斜杠,php,regex,preg-match,Php,Regex,Preg Match,这是我的功能,用于检查输入的安全问题和/或答案是否包含恶意字符: function validate_input($field) { $ErrorMessage = ""; $field = preg_replace("/[\s]+is/", '', $field); if(preg_match("/^[A-Za-z0-9'?!-\s]+$/", $field ) ===0) { $ErrorMessage .= "<div class='erro
function validate_input($field) {
$ErrorMessage = "";
$field = preg_replace("/[\s]+is/", '', $field);
if(preg_match("/^[A-Za-z0-9'?!-\s]+$/", $field ) ===0) {
$ErrorMessage .= "<div class='error_message'>Potentially malicious characters found in:<i> " . $field . ",</i> please enter only alphanumeric characters</div/><br/>";
} return $ErrorMessage;
}
函数验证\u输入($field){
$ErrorMessage=“”;
$field=preg_replace(“/[\s]+is/”,“”,$field);
如果(预匹配(“/^[A-Za-z0-9'?!-\s]+$/”,$字段)==0){
$ErrorMessage.=“在“.$field.”中发现潜在的恶意字符,请仅输入字母数字字符
”;
}返回$ErrorMessage;
}
当我为问题输入类似“What’s up?”的内容时,它会返回一个错误。当我在($field)上进行var_转储时,它返回为“What's up?”
那么,如何将正斜杠作为一个可接受的字符 您似乎拥有PHP active的“magic quote”功能,这不应该是出于安全原因:所有用户插入数据的转义都应该由您自己的代码完成 不管怎样,如果你想保持现状,就换掉你的
preg_match("/^[A-Za-z0-9'?!-\s]+$/", $field)
与
之所以有四元组\是因为您需要对其进行转义,因为它位于用双引号分隔的字符串中,并且位于正则表达式中。允许正斜杠和其他普通字符的示例
$string = "J’s Bikes/IHOP"; // bad user input
if (!preg_match("/^[A-Za-z0-9!@#$%&()*;:_.'\/\\\\ ]+$/", $string)) {
echo "Invalid $string";
}
您是否正在检查“恶意字符”以防止SQL注入?您应该停止使用
mysql.*
函数。他们被弃用了。改为使用(从PHP5.1开始支持)或(从PHP4.1开始支持)。如果您不确定使用哪一个。在这两种语言中使用准备好的语句时,它们将有助于防止sql注入,从而使上述代码变得不必要。
$string = "J’s Bikes/IHOP"; // bad user input
if (!preg_match("/^[A-Za-z0-9!@#$%&()*;:_.'\/\\\\ ]+$/", $string)) {
echo "Invalid $string";
}