哪一天 哪一天 我有吃有穿有住有钱 不再流浪 流浪
标签类目:mysql_real_escape_string

<转> addslashes() Versus mysql_real_escape_string()

原文在此: http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

Last month, I discussed Google’s XSS Vulnerability and provided an example that demonstrates it. I was hoping to highlight why character encoding consistency is important, but apparently the addslashes() versus mysql_real_escape_string() debate continues. Demonstrating Google’s XSS vulnerability is pretty easy. Demonstrating an SQL injection attack that is immune to addslashes() is a bit more involved, but still pretty straightforward.

In GBK, 0xbf27 is not a valid multi-byte character, but 0xbf5c is. Interpreted as single-byte characters, 0xbf27 is 0xbf (¿) followed by 0x27 ('), and 0xbf5c is 0xbf (¿) followed by 0x5c ().

How does this help? If I want to attempt an SQL injection attack against a MySQL database, having single quotes escaped with a backslash is a bummer. If you’re using addslashes(), however, I’m in luck. All I need to do is inject something like 0xbf27, and addslashes() modifies this to become 0xbf5c27, a valid multi-byte character followed by a single quote. In other words, I can successfully inject a single quote despite your escaping. That’s because 0xbf5c is interpreted as a single character, not two. Oops, there goes the backslash.

I’m going to use MySQL 5.0 and PHP’s mysqli extension for this demonstration. If you want to try this yourself, make sure you’re using GBK. I just changed /etc/my.cnf, but that’s because I’m testing locally:

Toggle Code View

返回顶部