php安全快速

php安全快速,php,security,Php,Security,在接下来的几天里,我将不得不保护一个网站(我做到了) 我想我应该写入config.php文件(在所有php页面中调用) 在config.php中,您认为我会是来自各种xxs和sql注入的siscuro吗? 我知道每个字段必须以不同的方式进行验证,数据库最好不要包含html实体 1) 除了post、get(可能还有请求)之外,我还应该过滤哪些其他变量? 2) 这个方法使我免于多次代码注入(xxs、sql注入等) 编辑:如果我用mysql\u real\u escape\u字符串代替htmlenti

在接下来的几天里,我将不得不保护一个网站(我做到了) 我想我应该写入config.php文件(在所有php页面中调用)

在config.php中,您认为我会是来自各种xxs和sql注入的siscuro吗? 我知道每个字段必须以不同的方式进行验证,数据库最好不要包含html实体

1) 除了post、get(可能还有请求)之外,我还应该过滤哪些其他变量? 2) 这个方法使我免于多次代码注入(xxs、sql注入等)

编辑:如果我用mysql\u real\u escape\u字符串代替htmlentities会更好吗? 我想确保安全性不完整,包括数据验证等。。。但是要防止注入:sql和xxs以及其他注入

编辑:当然,如果你使用“ddd”,我也会删除php标签(尽管我确信网站不会运行)


谢谢:)

请不要在同一时间使用“安全”和“快速”两个词。它可能不会有好的结局……:)

正如您已经提到的,如果不在数据库中存储HTML实体,而是在显示输出时应用
htmlentities
(或者使用为您处理转义的模板引擎),则会“更干净”

htmlentities
对SQL注入没有帮助(例如,想象一下
htmlentities(“'或1=1--”)的情况。为此,您需要类似于
mysql\u real\u escape\u string
$pdo->quote
的内容,尽管准备好的语句是最好的方法


然而,这是非常困难的(如果不是不可能的话),以适用于顶部的方法。最好看一看您使用的SQL语句,并用准备好的语句替换它们,或者至少转义您在这些查询中使用的任何输入参数。

请不要在同一时间使用“安全”和“快速”这两个词。它可能不会有好的结局……:)

正如您已经提到的,如果不在数据库中存储HTML实体,而是在显示输出时应用
htmlentities
(或者使用为您处理转义的模板引擎),则会“更干净”

htmlentities
对SQL注入没有帮助(例如,想象一下
htmlentities(“'或1=1--”)的情况。为此,您需要类似于
mysql\u real\u escape\u string
$pdo->quote
的内容,尽管准备好的语句是最好的方法


然而,这是非常困难的(如果不是不可能的话),以适用于顶部的方法。最好看一看您使用的SQL语句,并用准备好的语句替换它们,或者至少转义您在这些查询中使用的任何输入参数。

如果它这么简单,每个人都会这么做。没有人会建议使用良好的实践来编写安全的代码。这不是一条路要走。有时,您可能真的需要数据库中的那些值,而这些值可能会被“一网打尽”的代码错误地更改。一网打尽并不是安全验证机制的发展方向

在接下来的几天里,我将不得不保护一个网站


如果你继续尝试以这种方式保护你的网站,那么它最多也只能在未来几天保持安全。

如果是这么简单,每个人都会这么做。没有人会建议使用良好的实践来编写安全的代码。这不是一条路要走。有时,您可能真的需要数据库中的那些值,而这些值可能会被“一网打尽”的代码错误地更改。一网打尽并不是安全验证机制的发展方向

在接下来的几天里,我将不得不保护一个网站


如果您继续尝试以这种方式保护您的站点,那么它最多只能在未来几天内保持安全。

最好的方法是为每个输入定义数据类型,而不是像您建议的那样全局过滤所有输入数据。例如: 考虑这些领域: 姓名: 电邮: 年龄: 国家: 地址: 电话号码: 纯文本(文本区域): 文件(文件上传):

现在,如果要保护这些字段,必须分别处理它们。 1-名称:定义最大字符长度和数据类型(格式),通常名称仅由(A-z和空格)组成,有时只有一个配额('),如果有人输入像Eng这样的标题,则会有一个点(.)。 现在,让我们检查这个字段,考虑< /P>
<?php
$name = $_POST['name'];
$name_max_length = 30;
$name_min_length = 5;
$name_pattern = "/[a-zA-Z'\.\ ]{$name_min_length, $name_max_length}/";
if(!preg_match($name_pattern, $name)){
 $error[] = "Please enter valid character for name field";
}else{
 //lets now filter it for safe input
 //above check not passes any kind of XSS, but it passes SQL injection
 //we need to clear it from SQL injection 
 $name = htmlentities($name, ENT_QUOTES);
 //ENT_QUOTES: Will convert both double and single quotes.
}
?>

3-纯文本:同样,使用htmlentities($name,entu引号) 4-文件上载: -检查文件扩展名,您必须创建白色扩展名列表,然后将上载的文件扩展名与白色列表进行比较,例如:

<?php
$extensions = array('png', 'jpeg', 'gif');
if(!in_array($current_file_ext, $extensions)){
 $error[] = "Please select valid file type! (".implode(", ", $extensions);
}
?>

最后,在输入这些数据之前,请检查$error,如果发生这种错误,该数组将显示哪个$error

<?php 
if(count($error) > 0){
 //means $error contains errors
 //print error values
}else{
 //start inserting your data into database
}
?>

最好的方法是为每个输入定义数据类型,而不是像您建议的那样全局过滤所有输入数据。例如: 考虑这些领域: 姓名: 电邮: 年龄: 国家: 地址: 电话号码: 纯文本(文本区域): 文件(文件上传):

现在,如果要保护这些字段,必须分别处理它们。 1-名称:定义最大字符长度和数据类型(格式),通常名称仅由(A-z和空格)组成,有时只有一个配额('),如果有人输入像Eng这样的标题,则会有一个点(.)。 现在,让我们检查这个字段,考虑< /P>
<?php
$name = $_POST['name'];
$name_max_length = 30;
$name_min_length = 5;
$name_pattern = "/[a-zA-Z'\.\ ]{$name_min_length, $name_max_length}/";
if(!preg_match($name_pattern, $name)){
 $error[] = "Please enter valid character for name field";
}else{
 //lets now filter it for safe input
 //above check not passes any kind of XSS, but it passes SQL injection
 //we need to clear it from SQL injection 
 $name = htmlentities($name, ENT_QUOTES);
 //ENT_QUOTES: Will convert both double and single quotes.
}
?>

3-纯文本:同样,使用htmlentities($name,entu引号) 4-文件上载: -检查文件扩展名,您必须创建白色扩展名列表,然后将上载的文件扩展名与白色列表进行比较,例如:

<?php
$extensions = array('png', 'jpeg', 'gif');
if(!in_array($current_file_ext, $extensions)){
 $error[] = "Please select valid file type! (".implode(", ", $extensions);
}
?>

最后,在输入这些数据之前,请检查$error,如果发生这种错误,该数组将显示哪个$error

<?php 
if(count($error) > 0){
 //means $error contains errors
 //print error values
}else{
 //start inserting your data into database
}
?>

虽然在构建网站时通常做这类事情是个好主意。不同的网站需要不同的安全级别是合乎逻辑的。一个只有你访问的本地网站可能不需要任何东西,而一个小的“int”