codeigniter ontsnapt met Active Record Class voor SQL-injecties

From what I understand using $this->db->insert() escapes the values:

http://codeigniter.com/user_guide/database/active_record.html#insert

Note: All values are escaped automatically producing safer queries.

Maar als ik naar MySQL kijk, zijn mijn inputs niet ontsnapt, is het om de een of andere reden wat verwijderd?

Bezorgd over sql-injecties hier, dat is waarom ik het vraag.

1

2 antwoord

When you escape a string for SQL statements it doesn't necessarily mean that you should see backslashes added when you look into the data later. It means that certain characters will be escaped and the SQL statement will run without any errors. Try inserting data with mysql_real_escape_string

LINE: 557 https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Input.php

if ( ! is_php('5.4') && get_magic_quotes_gpc())
{
    $str = stripslashes($str);
}

En dan

LINE: 285 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php

$str = is_resource($this->conn_id) ? mysql_real_escape_string($str, $this->conn_id) : addslashes($str);

De tekenreeks wordt doorgegeven mysql_real_escape_string of invoegslashes . Daarom kunnen we zeggen dat veiligheidsmaatregelen tegen SQL-injecties in aanmerking worden genomen.

2
toegevoegd
Als dat het geval is, moet u een PHP-versie ouder dan 5.3 uitvoeren en magic_quotes_gpc inschakelen, die waarschijnlijk door CodeIgniter wordt overwogen en door stripslashes wordt gehaald voordat u mysql_real_escape_string .
toegevoegd de auteur P M, de bron
Ik werd nieuwsgierig en keek naar CodeIgniter. Het blijkt dat mijn gok goed is. Het bericht nu bewerken.
toegevoegd de auteur P M, de bron
Ja, het zal hetzelfde zijn. Omdat de invoer alleen door stripslashes wordt doorgegeven als de PHP-versie niet 5.4 is en get_magic_quotes_gpc true retourneert. get_magic_quotes_gpc retourneert geen true voor PHP 5.5 omdat magic_quotes_gpc is verwijderd vanaf PHP 5.4.
toegevoegd de auteur P M, de bron
Graag gedaan. Ik kan toch niet slapen.
toegevoegd de auteur P M, de bron
Yeah mysql_real_escape_string en htmlspecialchars ontsnappen de waarden en voegen ze toe aan de database met (\). Maar ik vraag me af of codeigniter eraan ontsnapt maar het niet in de database laat zien.
toegevoegd de auteur busycoding, de bron
Ja, je hebt gelijk over de oude versie. Ik heb magic_quotes_gpc uitgeschakeld en heb nog steeds hetzelfde probleem, ben benieuwd naar je bewerking :)
toegevoegd de auteur busycoding, de bron
Ja, bedankt, ik kijk daar nu ook naar. Zou het resultaat hetzelfde zijn zonder waarden met \\ wanneer ingevoegd in de database met PHP 5.4 met $ this-> db-> insert ()?
toegevoegd de auteur busycoding, de bron
Heel erg bedankt voor de hulp en snelle antwoorden :)
toegevoegd de auteur busycoding, de bron

DOOR "escaped" betekent dit het vervangen van dit:

SELECT * FROM table1 WHERE field1 LIKE "some string with " quotes"

voor deze:

SELECT * FROM table1 WHERE field1 LIKE "some string with \" quotes"

If you want to make sure your strings are escaped before saving it, consider using the $this->db->escape* methods: http://codeigniter.com/user_guide/database/queries.html

Controleer ook:

0
toegevoegd
Ja, het enige probleem dat ik heb is dat wanneer ik daadwerkelijk waarden in de database invoeg, ik de versie met escapecodes niet zie. Ik heb er de voorkeur aan dat het zo gebeurt. Gewoon op zoek naar bevestiging dat het daadwerkelijk ontsnapt, zodat SQL-injectie niet gebeurt. Ik heb hier gelezen dat je moet ontsnappen aan uitvoer, niet aan invoer. En met xss_clean zijn sommige mensen hier tegen en ik wil dat mensen dingen als of <script> indienen.
toegevoegd de auteur busycoding, de bron