Avatar billede Bente-Hedegaard Nybegynder
10. februar 2010 - 15:09 Der er 8 kommentarer og
1 løsning

mysqli_real_escape_string PHP

Hej eksperter,
jeg har et lille problem

Hvis jeg skriver følgende så virker det:
$log_name = isset($_POST['log_name'])?addslashes(mysqli_real_escape_string($conn,$_POST['log_name'])):"";



Men jeg vil gerne have lagt den i en funktion,
sådan at jeg kan tilføje eller fjerne ting at enkelt sted
uden at skulle gøre det alle steder i min kode.

Men hvis jeg skriver sådan her:
functio secure($str){
    $str = addslashes($str);
    $str = mysqli_real_escape_string($conn, $str);
    return $str;
};
$log_name = isset($_POST['log_name'])?secure($_POST['log_name']):"";



Så får jeg følgende fejl:
Notice: Undefined variable: conn in C:\apache\htdocs\test\login.php  on line 16

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\apache\htdocs\test\login.php on line 16
Avatar billede Bente-Hedegaard Nybegynder
10. februar 2010 - 15:11 #1
Jeg ville desuden gerne lige høre om mysqli_real_escape_string()
+ addslashes() er nok til at sikre sig selv imod angreb,
på eks. et login system.

Mvh. Bente
Avatar billede arne_v Ekspert
10. februar 2010 - 15:13 #2
$conn skal med over som argument til funktionen.

(for vi bruger naturligvis ikke global keyword)
Avatar billede arne_v Ekspert
10. februar 2010 - 15:13 #3
addslashes og mysqli_real_escape_string goer stort set det samme, saa jeg er skeptisk overfor hvorfor du bruger begge
Avatar billede Bente-Hedegaard Nybegynder
10. februar 2010 - 15:16 #4
Jeg fandt løsningen selv,
skulle have skrevet det sådan her:
function secure($str=""){
    include"include/dbconnect2.php";
    $str = mysqli_real_escape_string($conn, $str);
    return $str;
};

Men hvorfor skal min include også ligge inde i min function?
Kan den ikke modtage data udefra, med mindre de er sat som parametre i min secure? eller?

Mvh. Bente
Avatar billede Bente-Hedegaard Nybegynder
10. februar 2010 - 23:56 #5
Læste et sted at det var det mest sikre,
og det skader vel aldrig? eller?

Men er det nok at replace <,>,' også at sætte \ foran %,_
+ at tilføje addslashes og mysqli_real_escape_string

Eller er der noget mere som at man burde tilføje for at gøre siden lidt mere sikker?
Avatar billede arne_v Ekspert
11. februar 2010 - 02:18 #6
mysqli_real_escape_string alene er det næstbedste.

Det allerbedste er at bruge prepared statement.

addslashes og diverse string replace bør undgåes.
Avatar billede arne_v Ekspert
11. februar 2010 - 02:19 #7
En include inden i funktionen er ikke nogen god løsning. Den koster lidt i performance. Hvis du ændrer tegnsæt i connection udenfor er der et potentielt sikkerhedshul.

Du bør sende connection over som argument.
Avatar billede Bente-Hedegaard Nybegynder
11. februar 2010 - 10:11 #8
Hvordan gør man det?
Er lige skiftet over fra asp til php,
så det er kun de mest basale ting jeg lige pt.
kan finde ud af i php.
Avatar billede arne_v Ekspert
14. februar 2010 - 00:12 #9
function secure($conn, $str=""){
    return = mysqli_real_escape_string($conn, $str);
};

og kald den med:

secure($conn, $val)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester