webForumDet fria alternativet

Lite om sql injections/magic quotes/addslashes..

PHPur PHP

22 svar · 1 335 visningar · startad av Tulork · sida 2 av 2

Frågan, av Tulork

Undrar lite över det här med sql injections. Om mitt webhotell inte stödjer magic quotes, finns det något enkelt sätt att skydda sig utan att behöva lägga till massa extra i min redan massiva kod? Tänker då på add slashes och stripslashes?.. Går det att skapa någon form av funktion som automatiskt hanterar alla mina INSERT och UPDATE? EDIT\ har ju denna funktionen, men vet inte riktigt hur jag

Läs frågan i sin helhet →
Medlem sedan juni 20014 421 inlägg
#21

Otestat, men borde funka:

function auth_check($group_access,$level_access) 
{ 

    $now = time(); 
    $user_timeout = $now-300; 

    if (LOG_ONLINE == 1) { 
        // Radera äldre än timeout_online 
        $query = ("DELETE FROM tracked_online WHERE user_logged < $user_timeout"); 
        mysql_query($query); 
    } 
     
    $db = DB::getInstance(); 
     
    //if ($group_access >= 2) { 
     
        if (isset($_SESSION['user_id'])) { 
             
            $upd_user_sql = "SELECT user_group, user_name, user_pm_unread FROM ".TBL_TRACKED_USERS." WHERE (user_id = :user ) AND (user_session = :session)"; 
             
			$bindArr = array("user"=>$_SESSION['user_id'],"session"=>session_id());
			
            if (USER_IP_CHECK == 1) { 
            $upd_user_sql .= " AND (user_ip = :ip )";
            $bindArr['ip']= $_SERVER['REMOTE_ADDR'];
            } 
             
            $stmt = $db->prepare($upd_user_sql); 
             
            $stmt->execute($bindArr); 
             
            if ($this_user = $stmt->fetchAll(PDO::FETCH_ASSOC)) { 
                 
                    if (empty($this_user['user_group']) || ($this_user['user_group'] < $group_access)) { 
                        msg_die("No access","You have no access to this page"); 
                    } 
                    define('USER_ID',$this_user['user_id']); 
                    define('USER_NAME',$this_user['user_name']); 
                    define('USER_PM_UNREAD',$this_user['user_pm_unread']); 
                 
            }
Medlem sedan okt. 20001 285 inlägg
#22

Det är nog mkt möjligt att det gör, jag törs bara inte röra koden nu när det fungerar ;) tack för att du tog dig tid. Först så var jag eggad till tusen men när det inte alls fungerade så höll jag på att ge upp. Nu är det roligt igen ;)

$sql = "SELECT * FROM tabell WHERE aaaaa = :aaaaa AND bbbbb = :bbbbb";
$stmt = $db->prepare($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->bindParam(':aaaaa', $aaaaa, PDO::PARAM_STR);
$stmt->bindParam(':bbbbb', $bbbbb, PDO::PARAM_STR, 12);
$stmt->execute();
	
if ($result = $stmt->fetchAll()) {
print_r($result);
}
Medlem sedan okt. 20001 285 inlägg
#23

Alltså.... :(

om jag skriver $this_user = $stmt->fetch() istället för $this_user = $stmt->fetchAll() så får jag fel värden.. jag ska bara ha ut en rad men det blir cp

Ska jag alltid köra prepare ?

varför skriver en del direkt.. execute("SELECT... ?

Jag är allmänt förvirrad nu. Vill ha lite: så här är det ! så ska man göra!

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