Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP submitting forms, escaped quotes?

Tags:

html

php

If I have a form with a value of just "" and I submit it and echo it with PHP, I get \"\"

How can I get around this?

like image 536
mowwwalker Avatar asked Nov 22 '25 05:11

mowwwalker


2 Answers

This is because magic_quotes_gpc is on. This is a bad 'feature', designed to automatically escape incoming data for those developers who can't learn to escape SQL input.

You should disable this as soon as possible.

ini_set('magic_quotes_gpc', 'off');
like image 50
Delan Azabani Avatar answered Nov 24 '25 22:11

Delan Azabani


You should switch off magic_quotes_gpc, which is a broken feature (see Delan's answer, I completely agree).

But wait! You must sanitize the user input from $_REQUEST, $_POST and $_GET and $_COOKIE, if you want to use it for database or display at your page! Otherwise your code would be prone to various types of attacks!

There is nothing like "universal sanitization". Let's call it just quoting, because that's what its all about.

When quoting, you always quote text for some particular output, like:

  1. string value for mysql query
  2. like expression for mysql query
  3. html code
  4. json
  5. mysql regular expression
  6. php regular expression

For each case, you need different quoting, because each usage is present within different syntax context. This also implies that the quoting shouldn't be made at the input into PHP, but at the particular output! Which is the reason why features like magic_quotes_gpc are broken (always assure it is switched off!!!).

So, what methods would one use for quoting in these particular cases? (Feel free to correct me, there might be more modern methods, but these are working for me)

  1. mysql_real_escape_string($str)
  2. mysql_real_escape_string(addcslashes($str, "%_"))
  3. htmlspecialchars($str)
  4. json_encode() - only for utf8! I use my function for iso-8859-2
  5. mysql_real_escape_string(addcslashes($str, '^.[]$()|*+?{}')) - you cannot use preg_quote in this case because backslash would be escaped two times!
  6. preg_quote()
like image 28
Tomas Avatar answered Nov 24 '25 20:11

Tomas



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!