需要转义多少个字符?

时间:2016-07-05 16:15:56

标签: php mysql

我是PHP的新手。

我使用两种方法来转义字符串:

方法1.使用replace

function htmlreplace($str, $useBR = false) {
    $str2 = $str;
    $str2 = preg_replace ( "/</", "&lt;", $str2 );
    $str2 = preg_replace ( "/>/", "&gt;", $str2 );
    $str2 = preg_replace ( "/(\r\n|\n|\r)/", $useBR ? "<br />" : " ", $str2 );
    $str2 = preg_replace ( "/&/", "&amp;", $str2 );
    $str2 = preg_replace ( "/\'/", "&#39;", $str2 );
    return preg_replace ( "/\"/", "&#34;", $str2 );
}
$string='some string needs to insert into mysql';
stripslashes(htmlreplace($string));

方法2.连接MySQL

function sanitizeString($var, $DBconnection) {
    $var = strip_tags ( $var );
    $var = htmlentities ( $var );
    $var = stripslashes ( $var );
    return $DBconnection->real_escape_string ( $var );
}
$string='some string needs to insert into mysql';
trim ( sanitizeString ($string) );

SQL Injection Prevention Cheat Sheet

显示这些字符需要转义

NUL,  BS,  标签,  如果,  CR,  SUB,  %,  &#39 ;,  \  _,  ASCII值小于256的所有其他非字母数字字符

来自PHP addslashes

显示addslashes()函数将转义这些字符:单引号(&#39;),双引号(&#34;),反斜杠()和NUL(NULL字节)

据我所知,转义是为了防止SQL注入。

所以我很想知道有多少角色需要转义?这些是什么?它们都是Special Characters in HTML吗?

至于SQL注入防止,感谢Slico,Marc B和bub帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

从OWASP看一下这个link

主要防御:

  • 选项#1:使用准备好的语句(参数化查询)

  • 选项#2:使用存储过程

  • 选项#3:转义所有用户提供的输入

额外防御:

  • 同时执行:最低权限
  • 同时执行:白名单输入验证