PHP Sanitation with MSQLI Real Escape String and STRTR Opera


PHP Sanitation with MSQLI Real Escape String and STRTR Operators

以下代码是通过SQL和PHP将数据传递到远程数据库时对卫生方法的建议。

$name = strtr(mysqli_real_escape_string($connector_obj, $_POST['name']), '/''', '   ');

我的问题是 MSQLI 运算符会清理输入,然后 strtr 运算符附加使代码仍然安全,还是字段仍然容易受到攻击?此清理是在初始查询之后进行的,因此另一种选择是将值传递给经过净化的数据库,然后在事后执行 strtr 操作以将信息输出到面向客户的页面。

在更高级别的观点上,用户对 MSQLI 转义字符串中的斜杠的观察程度如何?我认为它看起来不那么吸引人,并为那些声誉不佳的人提供对应用程序结构的深入了解,但对这个想法的任何意见将不胜感激。

mysqli_real_escape_string只转义字符。 它不会消毒。

发布值时,就是清理时间了。

我更喜欢使用整数值。 我请求电话号码,而不是电子邮件地址作为用户名。然后使用正则表达式删除除数值之外的所有值。

$number = preg_replace('/[^'d]/','',$_POST['number']);

如果我正在寻找一个没有空格、逗号、破折号的整数,我只使用:

$number = intval($_POST['number']);

应限定查询中使用的值。

$sql =  sprintf("SELECT *  FROM `Client` WHERE `Number` = %d", $id);

我还会查看提交的所有内容。寻找通常用于SQL注入攻击的符号和单词。

  $strike1 = 1 + preg_match_all('/'x3F/',$SAVE_ID,$matches, PREG_SET_ORDER);  // )
  $strike2 = preg_match_all('/['x21-'x2F]|['x3A-'x40]|['x5B-'x60]|['x7B-'x7F]/',$SAVE_ID,$matches, PREG_SET_ORDER);
  $strike3 = preg_match_all('/'x28/',$SAVE_ID,$matches, PREG_SET_ORDER);  // )
  $strike4 = preg_match_all('/'x29/',$SAVE_ID,$matches, PREG_SET_ORDER);  // ( 
  $strike5 =  preg_match_all('/COALESCE|0x|like|regex|mid|select|delete|drop|insert|do|call|replace|update|infile|lock|set|from|into|show|table|kill|reset/i',$SAVE_ID,$matches, PREG_SET_ORDER);

当我看到太多违规行为时,我会禁止IP地址。

@mysql_unbuffered_query("INSERT INTO `Banned` (`ip`, `TimeStamp`,`Strike3`, `Attributes`) VALUES ('$ip', CURRENT_TIMESTAMP, $alert);");

我还监视密码失败。 如果我在短时间内看到太多失败的尝试,或者两次尝试之间的时间太短(不是人为的),我会禁止该IP。