相关疑难解决方法(0)

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

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

php sql-injection special-characters illegal-characters

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

使用PDO插入/更新辅助函数

我有一个非常简单的辅助函数来为传统的普通mysql驱动程序用法生成SET语句:

function dbSet($fields) {
  $set='';
  foreach ($fields as $field) {
    if (isset($_POST[$field])) {
      $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', ";
    }
  }
  return substr($set, 0, -2); 
}
Run Code Online (Sandbox Code Playgroud)

像这样用过

$id = intval($_POST['id']);
$fields = explode(" ","name surname lastname address zip fax phone");
$_POST['date'] = $_POST['y']."-".$_POST['m']."-".$_POST['d'];
$query  = "UPDATE $table SET ".dbSet($fields)." stamp=NOW() WHERE id=$id";
Run Code Online (Sandbox Code Playgroud)

它使代码非常干燥,同时也很灵活.

我要问是否有人愿意分享类似的功能,利用PDO预备语句功能?

我仍然怀疑,如何做到这一点.
是否有一种直接而简单的方法来使用PDO预处理语句来插入数据?应该是什么形式?查询构建器助手?还是插入查询助手?它应该采取什么参数?

我希望它可以很容易被用作SO的答案.因为在每个主题中我们都可以看到预备语句的使用建议,但是没有一个好的例子.真实的例子,我的意思是.键入bind_param()20次并不是一个好的编程风格我相信.甚至还有20个问号.

php mysql pdo

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

PHP PDO的预处理语句如何防止SQL注入?使用PDO有哪些其他好处?使用PDO会降低效率吗?

我一直在发现这句话PHP PDO's prepared statements prevents SQL injection.

  • php PDO(PDO准备好的语句)如何阻止sql注入?
  • 使用PDO(PDO准备好的声明)的其他优缺点是什么?
  • 使用PDO(PDO准备好的声明)会降低效率吗?

我已经读过:PDO准备好的语句是否足以阻止SQL注入? 但那里的数据并不完全清楚.

php pdo sql-injection

11
推荐指数
1
解决办法
6986
查看次数

这个PHP函数是否可以防止SQL注入?

我有这个我正在使用的功能,我想确保它完全防止SQL注入攻击:

function MakeSafeForQuery($string)
{
    // replace all of the quote
    // chars by their escape sequence

    $ret = str_replace("\\","\\\\",$string);
    $ret = str_replace("'","\\'",$ret);
    $ret = str_replace("\"","\\\"",$ret);

    return $ret;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么严肃的事吗?

编辑:我顺便使用MySQL.

php sql-injection

2
推荐指数
1
解决办法
4247
查看次数

MySQL注入预防不起作用?

我想使用mysql_real_escape_string阻止1 = 1,但不确定我是否正确,因为我仍然可以执行1 = 1.这是我的代码:

$memberId = mysql_real_escape_string($_GET["memberId"]);
$sql = "SELECT firstName, lastName, dateSent, message, messageId FROM member, message WHERE member.memberId = message.sentFromId AND message.inboxId=" . $memberId . " ORDER BY dateSent DESC;";
Run Code Online (Sandbox Code Playgroud)

谢谢

php mysql security

2
推荐指数
1
解决办法
128
查看次数

是什么让PDO比普通的mysql更安全?

一次又一次我在Stackoverflow上读到我应该使用PDO来访问MySQL,因为它更安全.我最近使用一些在线教程将一些select和insert语句更改为PDO,并发现它们与我的原始代码非常相似.这让我觉得也许我错过了一些东西.

那么,我的问题是what makes PDO safer than normal mysql?有什么能让这些例子更安全吗?

编辑:我已粘贴下面的插入代码.如果您能看到一些让它更安全的方法,请告诉我.

include 'dataB3S3.php';

try {
        $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
        /*** connect to DB ***/


        /*** INSERT data ***/
        $count = $dbh->exec("INSERT INTO $table(`instance` ,`uid`,`teid`) VALUES (NULL,'$userID','$teid')");

         /*** display the id of the last Auto INSERT ***/
        $lastInsertValue=$dbh->lastInsertId();

        /*** close the database connection ***/
        $dbh = null;  
}
Run Code Online (Sandbox Code Playgroud)

mysql pdo sql-injection

1
推荐指数
1
解决办法
406
查看次数