相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)

这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

用PHP清理用户输入的最佳方法是什么?

是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍允许某些类型的html标记?

php security xss user-input sql-injection

1069
推荐指数
14
解决办法
50万
查看次数

最终的清洁/安全功能

我有很多用户输入$_GET$_POST...目前我总是写mysql_real_escape_string($_GET['var'])..

我想知道你是否可以创建一个能够立即保护,转义和清理$_GET/ $_POST数组的函数,因此每次使用用户输入时都不必处理它.

我在想一个功能,例如cleanMe($input),和它里面,它应该做的mysql_real_escape_string,htmlspecialchars,strip_tags,stripslashes(我想这是所有做它的清洁与安全),然后返回$input.

这可能吗?使得对所有工作的功能$_GET$_POST,所以你会做只有这个:

$_GET  = cleanMe($_GET);
$_POST = cleanMe($_POST);
Run Code Online (Sandbox Code Playgroud)

那么在以后的代码中,当您使用eg $_GET['blabla']或者$_POST['haha']它们时,它们是安全的,剥离的等等?

试了一下自己:

function cleanMe($input) {
   $input = mysql_real_escape_string($input);
   $input = htmlspecialchars($input, ENT_IGNORE, 'utf-8');
   $input = strip_tags($input);
   $input = stripslashes($input);
   return $input;
}
Run Code Online (Sandbox Code Playgroud)

php security xss sql-injection

57
推荐指数
3
解决办法
6万
查看次数

什么是在PHP中清理整个$ _POST数组的好方法?

我有一个包含很多变量的表单,然后发送一封电子邮件,而不是$_POSTfilter_var($_POST['var'], FILTER_SANITIZE_STRING); 一个更简单的代码片段来清理每个值.我想出了下面的内容,这似乎有效,因为我相信默认操作是FILTER_SANITIZE_STRING,但我只是想知道人们的意见是什么,如果这不是好的做法,也许你可以告诉我为什么?$_POST然后将这些值单独嵌入到新变量中,因此我只会在开始时使用array_map来清理所有内容......

$_POST = array_map('filter_var', $_POST);
Run Code Online (Sandbox Code Playgroud)

感谢您的回复,为您提供更多信息,基本上:

我在一个表单中有20-30个输入字段被捕获,然后数据显示给用户检查输入,然后对变量进行清理,然后向用户发送电子邮件,最后将详细信息输入到数据库中.

目前我正在使用上面的array_map函数清理,以及在发送电子邮件之前使用电子邮件地址上的FILTER_SANITIZE_EMAIL,然后在插入数据库之前使用mysql_real_escape_string()转义输入.没有准备好的陈述等等.你认为我应该做什么吗?再次感谢!

php arrays sanitization

34
推荐指数
3
解决办法
5万
查看次数

在PHP中,当我向数据库提交字符串时,我应该使用htmlspecialchars()处理非法字符还是使用正则表达式?

我正在处理一个表单,其中有可能让用户在要提交给数据库的字符串中使用非法/特殊字符.我想在字符串中转义/否定这些字符,并且一直在使用htmlspecialchars().但是,有更好/更快的方法吗?

php sql-injection special-characters illegal-characters

19
推荐指数
2
解决办法
8138
查看次数

清理HTML输入值

你必须将除引号(")之外的任何东西转换为(")里面的:

<input type="text" value="$var">

我个人不知道如何在不使用的情况下突破这一点" on*=....

它是否正确?

编辑:显然有些人认为我的问题太模糊了;

<input type="text" value="<script>alert(0)</script>">不执行.因此,在不使用的情况下不可能打破使用".

它是否正确?

html javascript security xss

15
推荐指数
2
解决办法
2万
查看次数

清理$ _POST变量

我试图想出一种方法,用一个函数有效地轻松清理所有POST和GET变量.这是函数本身:

//clean the user's input
function cleanInput($value, $link = '')
{
    //if the variable is an array, recurse into it
    if(is_array($value))
    {
        //for each element in the array...
        foreach($value as $key => $val)
        {
            //...clean the content of each variable in the array
            $value[$key] = cleanInput($val);
        }

        //return clean array
        return $value;
    }
    else
    {
        return mysql_real_escape_string(strip_tags(trim($value)), $link);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是可以称之为的代码:

//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
    $_POST[$key] = cleanInput($value, $link);
} …
Run Code Online (Sandbox Code Playgroud)

php security variables post

13
推荐指数
3
解决办法
5万
查看次数

用于清理Mysql数据库输入的函数

我试图将一个通用功能放在一起,以清理对Mysql数据库的输入.到目前为止,这就是我所拥有的:

function sanitize($input){
    if(get_magic_quotes_qpc($input)){

        $input = trim($input); // get rid of white space left and right
        $input = htmlentities($input); // convert symbols to html entities
        return $input;
    } else {

        $input = htmlentities($input); // convert symbols to html entities
        $input = addslashes($input); // server doesn't add slashes, so we will add them to escape ',",\,NULL
        $input = mysql_real_escape_string($input); // escapes \x00, \n, \r, \, ', " and \x1a
        return $input;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解的定义get_magic_quotes_qpc().这是由php服务器设置为自动转义字符而不是需要使用addslashes().

我是否正确地使用过addslashes()并且 …

php mysql sanitization sql-injection

13
推荐指数
2
解决办法
5万
查看次数

是使用htmlspecialchars()进行输入/输出HTML清理,对于MySQL数据库糟糕的设计?

可能重复:
什么是最好的PHP输入清理功能?

是使用htmlspecialchars()进行输入/输出HTML清理,对于MySQL数据库糟糕的设计?

你是否应该只是不允许这些"危险"标志,因为它仍会显示b标签,i-tag和其他?怎么这样?

我问,因为它在wiki http://en.wikipedia.org/wiki/HTML_sanitization上

"通过清理用户提交的任何HTML代码,可以使用HTML清理来防止跨站点脚本和SQL注入攻击."

因此,除了使用PDO预处理语句,为了防止SQL注入,我想对所有输入和输出使用这个htmlspecialchars.但也许我应该用别的东西?

这是一个插入语句的好方法吗?:

$type= htmlspecialchars($_POST['animaltype']);
$name= htmlspecialchars($_POST['animalname']);
$age= htmlspecialchars($_POST['animalage']);        
$descr= htmlspecialchars($_POST['animaldescription']);
$foto= htmlspecialchars($_POST['animalfotourl']);
$date=htmlspecialchars($_POST['animalhomelessdate']);



$sqlquery  = "INSERT INTO animals_tbl(animaltype, animalname, animalage, animaldescription, animalfotourl, animalhomelesssince) VALUES (':type',':name',':age',':descr', ':foto', ':date')";


$stmt = $conn->prepare($sqlquery);
$stmt->bindParam(':type',$type, PDO::PARAM_STR);
$stmt->bindParam(':name',$name, PDO::PARAM_STR);
$stmt->bindParam(':age',$age, PDO::PARAM_INT);
$stmt->bindParam(':descr',$descr, PDO::PARAM_STR);
$stmt->bindParam(':foto',$foto, PDO::PARAM_STR);
$stmt->bindParam(':date',$date, PDO::PARAM_STR);

$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

html php database

9
推荐指数
2
解决办法
6819
查看次数

是否将用户输入转换为足以清理它的整数?

引用这个SO答案:

提交的所有内容最初都被视为字符串,因此强制将已知数字数据转换为整数或浮点数使得清理快速且无痛.

这是我独立提出的一种快速和脏查询的清理方法(从数字ID中查找表中的名称); 插入查询的唯一变量是ID,我知道ID应该大于零且小于255,所以我的清理如下(还有一点点验证):

$id = (int)$_REQUEST['id'];
if ($id < 1 || $id > 255) errmsg("Invalid ID specified!");
$name = $DB->query("SELECT name FROM items WHERE id=${id}")->fetch_all()[0][0];
Run Code Online (Sandbox Code Playgroud)

这是否足以防止SQL注入攻击或基于用户指定值的任何其他恶意攻击$id,还是仍然可以被利用?

注意:ID /名称不是"敏感",所以如果某些输入无意中转换为"1"或其他有效的ID值,我不在乎.我只想避免沿着小鲍比表的线条滑行.

php mysqli casting sql-injection

4
推荐指数
2
解决办法
899
查看次数