Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Mysql_Regex_Validation_Post - Fatal编程技术网

PHP字段验证使用什么方法

PHP字段验证使用什么方法,php,mysql,regex,validation,post,Php,Mysql,Regex,Validation,Post,其他方法的最佳实践是什么;外 !empty(); isset(); !is_null(); 以及为变量赋值,例如 $variable = $_POST['value']` 我是否使用以确保表单数据已验证为足够干净,可以使用 我是否尝试使用字段长度和正则表达式验证 如果端点是使用MySQL和PHP的API,使用htmlspecialchars()是否会导致使用这些方法的数据丢失的潜在问题?您可以使用filter\u输入方法并使用类似于filter\u SANITIZE\u SPECIAL\u

其他方法的最佳实践是什么;外

!empty();
isset();
!is_null();
以及为变量赋值,例如

$variable = $_POST['value']` 
我是否使用以确保表单数据已验证为足够干净,可以使用

我是否尝试使用字段长度和正则表达式验证


如果端点是使用MySQL和PHP的API,使用
htmlspecialchars()
是否会导致使用这些方法的数据丢失的潜在问题?

您可以使用filter\u输入方法并使用类似于
filter\u SANITIZE\u SPECIAL\u CHARS的过滤器。这是过滤post参数的更好方法

对于输入验证,我将向您介绍开放式Web应用程序安全项目(OWASP)。这些页面位于、和


因为您特别引用了MySQL,所以我要指出,最好的安全实践是使用PDO或MySQLi来参数化您的语句。在防止MySQL注入方面,参数化语句比依赖净化输入更有效,因为PHP不依赖语法来区分用户输入和SQL查询本身。但是,从数据库访问数据时,
htmlspecialchars()
仍然可以方便地防止XSS攻击

非常好的答案谢谢

在MySQL方面,参数化语句肯定是唯一使用的方法

我想对我来说最重要的是通过post方法提交值

如果我期望的是JSON,并且只有JSON,那么类似的东西应该可以在服务器端工作

function isJSON(MyTestStr){
    try {
        var MyJSON = JSON.stringify(MyTestStr);
        var json = JSON.parse(MyJSON);
        if(typeof(MyTestStr) == 'string')
            if(MyTestStr.length == 0)
                return false;
    }
   catch(e){
        return false;
    }
    return true;
}

然后,我应该能够通过直接从JSON中提取值并在PHP脚本中使用它们来做任何进一步的事情,而不用太担心。

每次使用输入数据都需要不同的过滤/保护

首先,我喜欢做

$foo = @$_POST['foo'];
if (empty(foo)) ... // take different action if foo is totally missing (not just blank)
要插入MySQL,请使用API中可用的转义机制--
real\u escape\u string
,或“binding”。不要使用
mysql\u*
API,它已被
mysqli\u*
取代。不要将多个查询合并到一个调用中

要在HTML页面上显示,请使用
htmlentities
。注意:在插入到数据库表之前不要使用它;那只会把桌子弄得乱七八糟。取而代之的是,在展示之前要有使用它的习惯

如果您有一个旧版本的PHP,您可能会尝试使用神奇的引号。不要!正如一篇评论所说的那样,“[这种]一刀切的逃避/引用方法是错误的,完全危险的。”


对于JSON,我喜欢
JSON\u encode(…)
JSON\u decode(…,TRUE)

这取决于您需要验证什么。。。例如,要检查电子邮件是否有效,请不要使用
!空()您混合了一些东西,验证/卫生、SQL注入/XSS等等。总的来说,这个问题对SO imho来说太广泛了,每个主题都有大量的资源。
htmlspecialchars
不应该在保存数据时使用,只在输出时使用,所以你不应该有任何数据丢失。但是我会用它来确保$\u POST['email']中确实包含一些内容吗,然后检查它是否是使用正则表达式的电子邮件,或者直接跳到正则表达式?试试这个