Gå til innhold

[Løst] Hjelp til security code i gjestebok


Anbefalte innlegg

Jeg la inn <?php ob_start(); ?> øverst i index.php scriptet nå og feilmeldingen forsvant og alt virker som det skal :)

 

Takk for hjelpa alle sammen :)

 

Fikk ikke lastet opp index.php her. Prøvde, men fikk beskjed om at jeg ikke kunne laste opp slike filer.

Problemet mitt er hvertfall løst :)

Lenke til kommentar
Videoannonse
Annonse
Ugh... Å bruke output buffering som en bugfix her er virkelig ingen god løsning. Men hvis det funker (og du ikke vil gjøre noe mer med det), så er det vel ikke noe problem. :)

 

Er det noe grunn til at det ikke bør fikses sånn? Hvorfor ikke tilfelle?

Fikk ikke lastet opp php filen her. Da må jeg tilfelle lime inn koden fra index.php

Lenke til kommentar

Grunnen er at bug-en fortsatt er der, men du omgår den ved å bruke output buffering. Ved å skjule bug på denne måten kan det i noen tilfeller straffe seg ved at scriptet oppfører seg uventet når du f.eks. gjør endringer andre steder i scriptet. Scriptet ditt bør etter min mening fungere uten å gi feilmeldinger før du evt. aktiverer output buffering. Prøv å gjør om filendelsen til .txt eller noe, og prøv å laste den opp på nytt. Det funker ikke om du bare limer inn innholdet, da får vi ikke sett tegnsettet filen er lagret med, etc. :)

Lenke til kommentar
La den øverst i shoutbox.php nå, og får denne feilmeldingen når jeg åpner gjesteboka:

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/*********/tina/shoutbox/index.php:8) in /usr/home/web/*********/tina/shoutbox/shoutbox.php on line 1

 

edit:

Nå får jeg skrevet innlegg med koden og det fungerer greit :)

Vil bare ha vekk denne feilmeldinga som vises øverst hvis det er mulig.

 

 

Sett en @ foran session_start(); Det fjerner feilmeldingen. Det kan du gjøre på de fleste funksjoner.

 

Slik:

 

<?php @session_start();

Endret av php_user
Lenke til kommentar

Jøss, det er det dårlige rådet jeg har hørt noen sinne. Hvis du leser tråden, så ser du at det nettopp har blitt diskutert slike enkle måter å gå rundt problemer på, men som egentlig ikke løser det. Feilmeldingen er der for en grunn, nemlig for å fortelle at session-header ikke ble sent til nettleseren. Det er noe som må løses for å opprettholde funksjonalitet.

Endret av Jonas
Lenke til kommentar
Jøss, det er det dårlige rådet jeg har hørt noen sinne. Hvis du leser tråden, så ser du at det nettopp har blitt diskutert slike enkle måter å gå rundt problemer på, men som egentlig ikke løser det. Feilmeldingen er der for en grunn, nemlig for å fortelle at session-header ikke ble sent til nettleseren. Det er noe som må løses for å opprettholde funksjonalitet.

 

 

Vis du setter på @ så blir problemet løst i de fleste tilfeller..

Lenke til kommentar

Det å sette @ foran funksjonen blokkerer bare feilmeldingen, men hvis du ser på feilmeldingen du har fått så prøver session_start å varsle at den ikke får sendt cache-limiteren i header til nettleseren fordi det alt har blitt sendt output. session_start må calles før det noe som helst blir printet slik at den kan sende headers. Hvis den ikke får det så risikerer du at sessions ikke fungerer som det skal, evt. at nettleseren cacher sidene fordi den ikke har fått beskjed om ikke å gjøre det.

 

Moralen er: Aldri undertrykk feilmeldinger, men finn roten til problement.

Roten til problemet her er, som sagt, at du må ha session_start før all output blir sendt. ob_start fikser der kun fordi den holder tilbake all output til hele scriptet har kjørt, slik at du kan modifisere headers hvor som helst..

Lenke til kommentar
Jøss, det er det dårlige rådet jeg har hørt noen sinne. Hvis du leser tråden, så ser du at det nettopp har blitt diskutert slike enkle måter å gå rundt problemer på, men som egentlig ikke løser det. Feilmeldingen er der for en grunn, nemlig for å fortelle at session-header ikke ble sent til nettleseren. Det er noe som må løses for å opprettholde funksjonalitet.

 

 

Vis du setter på @ så blir problemet løst i de fleste tilfeller..

Nei, nei og atter nei! Alfakrøll løser virkelig ingen ting.

Endret av Jonas
Lenke til kommentar
Det å sette @ foran funksjonen blokkerer bare feilmeldingen, men hvis du ser på feilmeldingen du har fått så prøver session_start å varsle at den ikke får sendt cache-limiteren i header til nettleseren fordi det alt har blitt sendt output. session_start må calles før det noe som helst blir printet slik at den kan sende headers. Hvis den ikke får det så risikerer du at sessions ikke fungerer som det skal, evt. at nettleseren cacher sidene fordi den ikke har fått beskjed om ikke å gjøre det.

 

Moralen er: Aldri undertrykk feilmeldinger, men finn roten til problement.

Roten til problemet her er, som sagt, at du må ha session_start før all output blir sendt. ob_start fikser der kun fordi den holder tilbake all output til hele scriptet har kjørt, slik at du kan modifisere headers hvor som helst..

 

 

Holder det å ha 1 session start(); i en fil man inkluderer ?

Lenke til kommentar

Ved å sette @ forran skjuler man bare feilmeldingen og scriptet "fungerer" uten den funksjonen man satte @ forran.

Det er sant at feilmeldingen er der for en grunn, altså at session_start ikke blir lagt til i header, men det løser ob_start ved å generere siden på serveren (og flytte session_start) før den sendes til brukeren.

 

Om man forøvrig har en treg server, eller filen er f.eks en UTF-8-fil med BOM er det bedre å endre hvordan scriptene er bygget opp. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...