Avatar billede hewa Nybegynder
10. februar 2007 - 10:52 Der er 38 kommentarer og
1 løsning

Haj til sikkerhed søges

Første skal det lige siges, at get_magic_quotes_gpc er slået til på serveren og PHP kører i safe mode.

Næst vil jeg gerne have, er, at man ikke kan skrive HTML i mine brugerfelter, der skal man f.eks. skrive og og det erstattes så af <b> og </b>

For at gøre det så simpelt som muligt, består eksemplet herunder af kun et felt, men i den virkelig verden er der flere felter og alle skal kunne indeholde tekst og tal, svarende til hvad der kan stå i et debatforum.

Her er selve oprettelsen:
if(isset($_POST['opret'])) {
mysql_query("INSERT INTO celle (noget) VALUES ('".$_POST['noget']."'") or die(mysql_error());
echo "Oprettet!";
}
echo "<b>Opret noget</b><br><br>
<form action='' method='POST'>
<input type='text' name='noget' size='30'><br><br>
<input type='submit' value='Gem' name='opret'>
</form>";

Og udtrækket til visning:
$query = mysql_query("SELECT * FROM celle");
while($row = mysql_fetch_assoc($query))
{
echo $row['noget'];
}

Hvis jeg skal have en fornuftig sikkerhed, hvordan kommer koden så til at se ud?
- spørg endelig hvis du er i tvivl om, hvad jeg mener, eller der er andet, der kan være relevant!!
Avatar billede mccookie Seniormester
10. februar 2007 - 11:00 #1
Du skal være sikker på hvad brugeren sender af input til din database, der er lidt åbent på alle hylderne ;)

Brug addslashes . . . . og tilsvarende stripslashes



///McCookie
Avatar billede hewa Nybegynder
10. februar 2007 - 11:06 #2
Men efter hvad jeg synes, jeg har kunne læse mig til, er det ikke nødvendigt, når get_magic_quotes_gpc er slået til...?
Avatar billede Bjarne Novice
10. februar 2007 - 11:16 #3
if (!get_magic_quotes_gpc()) {
  mysql_real_escape_string($str);
}

Du skal ikke bruge addslashes her.
Avatar billede mccookie Seniormester
10. februar 2007 - 11:21 #4
hewa>> Kendte ikke den feature - Sorry ;)

///McCookie
Avatar billede hewa Nybegynder
10. februar 2007 - 11:24 #5
Helt ok mccookie :)

bjarne003, det forstår jeg ikke, hvordan kan jeg bruge det i ovenstående eksempel?
Avatar billede zynzz Praktikant
10. februar 2007 - 12:21 #6
Måske kan denne funktion bruges:

function sikre($var) {

if(get_magic_quotes_gpc()) {
$var = stripslashes($var);
}

if(!is_numeric($var)) {
$var = "'". mysql_real_escape_string($var) ."'";
}

return $var;
}


sql:

mysql_query("INSERT INTO celle (noget) VALUES ('".sikre($_POST['noget'])."') or die(mysql_error());
Avatar billede coderdk Praktikant
10. februar 2007 - 12:41 #7
strip_tags() fjerner alle HTML-tags, men det kan være at du vil skrive selve taggene ud, så jeg ville flg. når du skriver ud:

$felt = htmlentities( $felt );
echo preg_replace( "/\[b\](.*?)\[\/b\]/i", "<b>\\1</b>", $felt );
Avatar billede hewa Nybegynder
10. februar 2007 - 13:45 #8
Jeg vil godt indrømme, jeg er lidt tung, når det gælder det her med sikkerhed :)
zynzz, hvad er det, din kode gør?
coderdk, skal jeg forstår det sådan, at den fjerne htmel, men laver jeg den nederste linje, vil der gøre så [b] alligevel bliver lavet til html?

Er det hvad jeg har brug for, når det gælder sikkerhed?

Jeg fandt på et tidspunkt denne kode:
$noget = mysql_real_escape_string(strip_tags(htmlentities($_POST['noget'])));

Vil den kunne bruges, er det en sammensmeltning af det I har lavet til mig?
Avatar billede zynzz Praktikant
10. februar 2007 - 13:59 #9
Avatar billede hewa Nybegynder
10. februar 2007 - 14:01 #10
zynzz, den side var jeg inde på tidligere i dag, men jeg fattede ikke en brik af det :)
Det med at kode synes, jeg er svært, blander man det så med engelsk, er jeg helt lost :)
Avatar billede hewa Nybegynder
10. februar 2007 - 14:09 #11
Hvis jeg nu gør sådan, når jeg gemmer det i databasen:
$noget = mysql_real_escape_string(htmlentities($_POST['noget']));

Vil jeg så være ok sikret?

Hvad med når jeg trækker noget ud fra databasen, bør jeg så også lægge en eller andet sikrings-ting ind?
Avatar billede hewa Nybegynder
10. februar 2007 - 14:11 #12
Kan jeg evt. skrive en eller anden kode i et brugerfelt for at tjekke, om sikkerheden er ok?
Avatar billede mccookie Seniormester
10. februar 2007 - 14:14 #13
Hewa>> Din metode 14:09:25

Er fornuftig og sikker så langt øjet rækker, du ved aldrig hvad der lurer om hjørnet!

Udover dit script er der mange andre faktorer
- Serveren
- Forbindelse
- Dem der passer serveren
osv. osv.

Du vil være godt sikret mod at onde hoveder forsøger at smadre din database.

///McCookie
Avatar billede simplus Nybegynder
10. februar 2007 - 14:20 #14
#14:11:01

Ja det kan du godt, men jeg synes ikke nogen herinde bør give dig koderne da mindre begavede brugere kan kopiere det og ødelægge andre dårligere-beskyttet sites.
Hvis du dog har en mail, kan jeg evt. forklare dig lidt om hvilke muligheder du har?
Avatar billede simplus Nybegynder
10. februar 2007 - 14:24 #15
Kan lige uddybe mig selv da nogle kan opfatte det forkert. Jeg har på ingen måde erfaring med at ødelægge sites (:-)) men man lære ved at studere sikkerhed samt læse sikkerhedstutorials.
Avatar billede hewa Nybegynder
10. februar 2007 - 14:31 #16
simplus, jeg forstår hvad du mener - og jeg er slet ikke i tvivl om, der er flere, der kunne finde på at udnytte det!!

Jeg lavede en dag et link til siden, og der lå noget test åben, som jeg kunne øve mig på, man kunne oprette og man kunne slette... ja det blev så brugt, dagen efter var det der kunne slettes slettet (røvbanan) :-/

Du må meget gerne skrive til mig på henrik [snabela] crazyinlove.dk
- der er ikke nogen der skriver på den adresse endnu, så giv mig lige et praj her, når du har sendt det, ellers ser jeg det ikke :)
Avatar billede hewa Nybegynder
10. februar 2007 - 14:35 #17
McCookie (og andre :), hvad så når jeg laver en forespørgsel og et udtræk fra databasen, skal jeg så også lave en kode-sikring?

Et eller andet sted i mit baghoved ligger der noget med, at man også laver sikre foresprøgelser...
Avatar billede simplus Nybegynder
10. februar 2007 - 14:46 #18
En mail er sendt :-)
Avatar billede zynzz Praktikant
10. februar 2007 - 15:08 #19
Du er nød til at sikre alt hvad brugeren er i nærhed af..
Avatar billede simplus Nybegynder
10. februar 2007 - 15:12 #20
Med hensyn til udtræk som du nævvner i 14:35:03 så vil jeg sige at det kommer an på hvad databasen indeholder. Hvis indholdet allerede er tjekket og ikke indholder 'farligt' data, jamen så kan der jo ikke ske noget ved at trække det ud.
Avatar billede hewa Nybegynder
10. februar 2007 - 15:12 #21
Ja, det er det, jeg gerne vil :) men er brugerne i nærheden af en forespørgelse? F.eks. bliver menuen generet dynamisk, så bør der være sikker der? Det må jeg da indrømme, jeg ikke har... og hvordan kan jeg gøre det?
Avatar billede simplus Nybegynder
10. februar 2007 - 15:12 #22
Det vil jeg give zynzz ret i. Alt input udefra _skal_ tjekkes!
Avatar billede hewa Nybegynder
10. februar 2007 - 15:14 #23
Okay, simplus, så hvis det indhold der er gået i databasen er sikkert, kan jeg roligt lave det sådan:
$query = mysql_query("SELECT * FROM celle");
while($row = mysql_fetch_assoc($query))
{
echo $row['noget'];
}
Avatar billede simplus Nybegynder
10. februar 2007 - 15:16 #24
hewa, nej brugeren kan ikke ændre noget som bliver udskrevet da brugeren hverken har et input felt eller adgang til mysql. Hvis dit mysql login derimod ikke er beskyttet så vil brugeren jo kunne få adgang til alle forespørgelser, bare ved selv at lave en fil og logge på.
Avatar billede simplus Nybegynder
10. februar 2007 - 15:17 #25
15:14:10 -> ja, men kun hvis indholdet er sikkert.
Avatar billede hewa Nybegynder
10. februar 2007 - 15:18 #26
Men kan jeg sikre mit login bedre, end ved at have en god adgangskode?
Mit login til databasen ligger jo i en fil som vel ved de fleste andre - men den kan man vel ikke komme til?? Nu bliver jeg sgu da helt nervøs :)
Avatar billede hewa Nybegynder
10. februar 2007 - 15:20 #27
15:17:15, der har ikke været nogle brugerfelter indtil nu, og jeg vil jo gerne have, det er sikkert fra starte :)
Avatar billede simplus Nybegynder
10. februar 2007 - 15:56 #28
tror du misforstod mig med hensyn til forbindelsen til mysql. Det jeg mente var at filen ikke skulle være tilgængelig for folk samt at den IKKE skal være en .inc fil.
Avatar billede hewa Nybegynder
11. februar 2007 - 10:06 #29
Tak for hjælpen i går!!

Nu til det der er værre, point. Der var jo flere, der bidrog med noget godt og konstruktivt. Når jeg kigger ned over siden, var det simplus, der "arbejde hårdest", så er der nogen, der føler sig stødte, hvis han får pointene? Ellers må I sige til!
Avatar billede simplus Nybegynder
11. februar 2007 - 19:58 #30
Naah det går nok, jeg springer over med pointene ;-)
Avatar billede zynzz Praktikant
12. februar 2007 - 07:59 #31
nej tag han bare dem... :)
Avatar billede hewa Nybegynder
12. februar 2007 - 12:04 #32
Sikke al den beskedenhed der er i denne tråd :)
Avatar billede zynzz Praktikant
13. februar 2007 - 08:06 #33
Ja vi er meget beskeden... :P
Avatar billede hewa Nybegynder
14. december 2007 - 18:17 #34
simplus og zynzz - der er stadig point der venter her. Hvem vil have dem? Kan jeg evt. dele dem mellem jer?
Avatar billede zynzz Praktikant
14. december 2007 - 19:53 #35
Jamen så lad os dele... :)
Avatar billede hewa Nybegynder
15. december 2007 - 01:23 #36
Skal I så ikke bare give et svar begge to?
Avatar billede zynzz Praktikant
15. december 2007 - 20:32 #37
her... :)
Avatar billede hewa Nybegynder
29. december 2007 - 12:44 #38
Simplus har ikke reageret, så du får alle zynzz.
Avatar billede zynzz Praktikant
30. december 2007 - 11:55 #39
Det er bare iorden, hvis han reagere giver jeg ham 50... ;)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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