webForumDet fria alternativet

Server med PHP 5.3, globals? magic_quotes?

5 svar · 603 visningar · startad av Renegade8164

Renegade8164Medlem sedan sep. 201046 inlägg
#1

Hej.
Jag håller på med en ny sajt och så kom jag på att tänka på säkerhet. Min server som jag kör sajten på har PHP 5.3. mina kod-block om säkerheten vet inte jag om den är helt onödig kod eftersom att PHP 5.3 har tagit bort register_globals?, eller gör någon nytta alls eller om jag borde ändra på koden på något vis?

Detta är en del av min kod; (har tagit bort kod som inte innefattar de ja frågar om samt kommentar-block)

<?php

class init 
{
    function add_magic_quotes($array) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                $array[$k] = add_magic_quotes($v);
            } else {
                $array[$k] = addslashes($v);
            }
        }
    return $array;
}
<?php

 error_reporting(E_ALL | E_STRICT);
 
 ini_set('arg_separator.output',    '&amp;');
 ini_set('magic_quotes_runtime',    0);
 ini_set('magic_quotes_sybase',     0);
 ini_set('session.cache_expire',    200000);
 ini_set('session.cache_limiter',   'none');
 ini_set('session.cookie_lifetime', 200000);
 ini_set('session.gc_maxlifetime',  200000);
 ini_set('session.use_trans_sid',   0);
 ini_set('url_rewriter.tags',       '');

 // Security-fix: globals
 if (isset($_POST['GLOBALS']) ||
     isset($_FILES['GLOBALS']) ||
     isset($_GET['GLOBALS']) || 
     isset($_COOKIE['GLOBALS']) || 
     isset($_REQUEST['GLOBALS'] )) {
     die;
 }
 
 // Require important initialization class
 require_once "../resources/class/init.php";
 $init = new init;
 
 // Security-fix: magic_quotes
 if (!get_magic_quotes_gpc()) {
     $_GET    = $init->add_magic_quotes($_GET);
     $_POST   = $init->add_magic_quotes($_POST);
     $_COOKIE = $init->add_magic_quotes($_COOKIE);
 }
nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Alttså... PHP-teamet tog bort magic quotes eftersom det var ett dumt sätt att lösa problemet på. Istället för att emulera magic quotes bör du göra rätt, dvs escapa vid varje databas-fråga. Ännu bättre är att använda mysqli-interfacet och prepared statements, som i princip helt eliminerar risken att råka ut för SQL-injektioner..

Magic quotes saniterar bara data som inkommer via formulär. Ponera att du någonstans har en sträng som hämtas ut från databasen och sedan stoppas in i en annan SQL-fråga. Den strängen kommer ju inte att saniteras eftersom den inte inkom via ett formulär.

colioneMedlem sedan juni 20014 421 inlägg
#3

Istället för mysqli bör du kolla på PDO och dess prepared statements, det är mer generiskt och samma php-kod kan användas om du skulle behöva byta databas.
http://php.net/manual/en/book.pdo.php

Om något bör du kolla om magic_quotes är påslaget och rensa bort slasharna.
Sök även efter pdo här på wF så får du upp lite intressanta träffar.

Renegade8164Medlem sedan sep. 201046 inlägg
#4

Har kört med PDO ett år nu.. :)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#5

Renegade8164 skrev:

Har kört med PDO ett år nu.. :)

Med prepared statements också? I sådana fall så bör du inte använda magic quotes - alls.

Renegade8164Medlem sedan sep. 201046 inlägg
#6

Japp..
Jag har bara utvecklat php i några år, så jag kan inte hela php-manualen^^, men försöker granska och använda mig av de bästa lösningarna php5 erbjuder :P.. Bäst att fråga innan, så lär man sig om man gör fel.

129 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)