First of all, I understand that magic_quotes causes all kinds of problems and has no place in modern PHP. I'm in a very specific situation where I've upgraded XAMPP from PHP 5 to PHP 7.4 for an intranet site comprised of more than 5000 files. Suddenly, all kinds of SQL INSERT queries are breaking when the user-generated string has single or double quotes in it. It's in no way feasible for me to go through and wrap every variable across these 5000 files with the add_slashes function, so I need to come up with some way to globally apply the same logic that magic_quotes did. Any suggestions?
Asked
Active
Viewed 55 times
-1
-
Use PDO or `escape_string` function at least. – pavel Jun 01 '21 at 15:35
-
1Neither magic_quotes nor addslashes fixes SQL injection. You need to use prepared statements with bound parameters. – Alex Howansky Jun 01 '21 at 15:36
-
@AlexHowansky is there any way to apply this globally, not line-by-line? – kdsprogrammer Jun 01 '21 at 15:48
-
Impossible to say without seeing the code, but probably not. – Alex Howansky Jun 01 '21 at 15:56
1 Answers
0
You really need to update this application How can I prevent SQL injection in PHP?. However, I am pretty sure that's not going to happen. So, in a header file or one that is included before any database operation (auto_prepend_file maybe), just map the superglobals to addslashes
. You can add $_COOKIE
if needed:
$_POST = array_map('addslashes', $_POST);
$_GET = array_map('addslashes', $_GET);
Obviously this won't handle multidimensional arrays so you'll have to use a recursive function:
function addslashes_recursive($v) {
$v = is_array($v) ? array_map('addslashes_recursive', $v) : addslashes($v);
return $v;
}
$_POST = addslashes_recursive($_POST);
$_GET = addslashes_recursive($_GET);

AbraCadaver
- 78,200
- 7
- 66
- 87
-
This works, thank you. This is definitely a stop gap, we're rebuilding the whole thing in Laravel within the next year. This is also completely internal to their company, so I'm not worried about malicious SQL injection. – kdsprogrammer Jun 01 '21 at 15:54