---
title: "Säkerhet? Delar av SQL-sats i Query"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/105195-säkerhet-delar-av-sql-sats-i-query"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "axl"
published: "2004-06-07T15:31:51.000Z"
updated: "2004-06-10T13:34:20.000Z"
replies: 6
views: 399
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/105195-säkerhet-delar-av-sql-sats-i-query"
---

# Säkerhet? Delar av SQL-sats i Query

## #1 — axl, 2004-06-07T15:31Z

Hej!
Håller på att bygga en webshop. Har lite frågor om detta. Har en php-fil som heter listaprod.php som lista alla produkter.

1\. Den får delar av SQL-satsen i en querystring hur osäkert/säkert är det igentligen?

2\. Jag använder funktionen QueryCode och QueryDecode, ngn som har ngt tips om ett bättre sätt att lösa problemet med = och '?

utdrag ur koden:

```php
Function QueryDecode($str)
{
$str = str_replace("xlikax", "=", $str);
$str = str_replace("xsnuffx", "'", $str);
return($str);
}

Function QueryCode($str)
{
$str = str_replace("=", "xlikax",  $str);
$str = str_replace("'", "xsnuffx", $str);
return($str);
}

// $urval kan till exempel vara "kategorixlikax10" el
// "namn like xsnuffx%apa%xsnuffx" 
// $sort kan vara tex "namn" el "namn DESC"
$SQL =  "SELECT artnr,namn,webbpris FROM produkt WHERE " . QueryDecode($urval) . " ORDER BY " . $sort . ";";
```

Tacksam för svar!

Permalänk: https://www.webforum.nu/p/105195

## #2 — K@llen, 2004-06-07T15:54Z

\* Se till så att PHP kör addslashes() automatiskt på dina variabler, vilket är default.
\* Validera dina (numeriska) värden innan de skickas till sql-frågan.

Permalänk: https://www.webforum.nu/p/1362493

## #3 — axl, 2004-06-07T16:26Z

Hej igen!
Jag kanske är lite trög ;) men fattar inte riktigt det där med add_slashes, ngn som kan förklara närmare.

Skickar inga querystring som innehåller bara tal så Isnumric() går ju inte och använda

BTW, jag har "register_globals = On" i php.ini, hur osäkert/säkert är detta?

Permalänk: https://www.webforum.nu/p/1362509

## #4 — K@llen, 2004-06-07T16:31Z

register_globals ska vara avstängd och du ska/bör använda:

$\_GET\['var'\]
$\_POST\['var'\]
$\_SESSION\['var'\]
osv

istället för bara $var

Men det har mer med funktionalitet att göra.

Angående addslashes() så handlar det om att köra escapesekvenser automatiskt när så behövs. Detta ställs in i php.ini enligt följade (men kan även ställas in med ini_set()):

> **php.ini skrev:**
>
> Magic quotes for incoming GET/POST/Cookie data.
> magic_quotes_gpc = On
> 
> Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
> magic_quotes_runtime = Off
> 
> Use Sybase-style magic quotes (escape ' with '' instead of ').
> magic_quotes_sybase = Off

Permalänk: https://www.webforum.nu/p/1362514

## #5 — K@llen, 2004-06-07T16:36Z

Missade en sak, isnumeric() validerar inte numeriska värden helt och hållet. Den godkänner lite avvikelser. Istället bör du använda exempelvis följande pattern:

```
!preg_match( "/^([0-9]+)$/", $_GET['numericVar'] )
```

RED:
Missade en parantes.

Permalänk: https://www.webforum.nu/p/1362519

## #6 — axl, 2004-06-07T17:45Z

Jag tror det har klarnat för mig lite! Tack för hjälpen!

Permalänk: https://www.webforum.nu/p/1362547

## #7 — danjel, 2004-06-10T13:34Z

Jaha första posten. :)

Jag brukar använda denna funktion,så slipper man problem med att maqic quotes kan vara av- respektive påslaget.

function db_in( $indata ){ 
	if(get_magic_quotes_gpc()){ 
		return trim($indata);
	}else{ 
		return addslashes(trim($indata));
	}
}

$var = db_in($\_GET\['something'\])

"SELECT \* FROM x WHERE y = '$var' ";

..och om det inte är en sträng utan bara ett id  :

$id = (int) $\_GET\['id'\]

Då kan man inte manipulera strängen. Bokstäver tex blir till en nolla bara..

Permalänk: https://www.webforum.nu/p/1366973

---

Tråden på webben: https://www.webforum.nu/amne/php/105195-säkerhet-delar-av-sql-sats-i-query
