美工统筹SEO,为企业电子商务营销助力!
PHP函数addslashes和mysql_real_escape_string的区分一佰互联网站扶植(www.taishanly.com) 宣布时候:2020-04-29 09:01:54 阅读数: 107 |
起首:不要操纵mysql_escape_string,它已被弃用,请操纵mysql_real_escape_string取代它。 mysql_real_escape_string和addslashes的区分在于:区分一:addslashes不晓得任何有关MySQL毗连的字符集。若是你给所操纵的MySQL毗连通报一个包罗字节编码以外的其余编码的字符串,它会很兴奋地把一切值为字符‘、“、和x00的字节遏制本义。若是你正在操纵差别于8位和UTF-8的别的字符,这些字节的值不一定全数都是表现字符‘、“、和x00。能够形成的成果是,MySQL领受这些字符后呈现毛病。 若是要批改这个bug,可测验考试操纵iconv函数,将变量转为UTF-16,而后再操纵addslashes遏制本义。 这是不操纵addslashes遏制本义的缘由之一。 区分二: 这是不操纵addslashes遏制本义的另外一个缘由。 addslashes V.S. mysql_real_escape_string 在GBK里,0xbf27不是一个正当的多字符字符,但0xbf5c倒是。在单字节环境里,0xbf27被视为0xbf前面跟着0×27(‘),同时0xbf5c被视为0xbf前面跟着0x5c()。 一个用反斜杠本义的单引号,是没法有用禁止针对MySQL的SQL注入进犯的。若是你操纵addslashes,那末,我(进犯者,下同)是很荣幸的。我只需注入一些近似0xbf27,而后addslashes将它修改成0xbf5c27,一个正当的多字节字符前面接着一个单引号。换句话说,我能够疏忽你的本义,胜利地注入一个单引号。这是由于0xbf5c被看成单字节字符,而非双字节。 在这个演示中,我将操纵MySQL 5.0和PHP的mysqli扩大。若是你想测验考试,请确保你操纵GBK。 成立一个名为users的表: 虽然操纵了addslashes,我仍是能够在不晓得用户名和暗码的环境下胜利登录。我能够轻松的操纵这个缝隙遏制SQL注入。 要以避免这类缝隙,操纵mysql_real_escape_string、筹办语句(Prepared Statements,即“参数化查问”)或肆意一款支流的数据库笼统类库。 |
上一篇:phpmailer中文乱码题目的处理体例 下一篇: 本身写了一个php检测文件编码的函数 |
[前往消息列表] |