Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

Videoannonse
Annonse

Fra kommentarene for strrpos() på php.net:

 

<?php

function filename_extension($filename) {

    $pos = strrpos($filename, '.');

    if($pos===false) {

        return false;

    } else {

        return substr($filename, $pos+1);

    }

}

?>

 

Bare husk at filendelse ikke nødvendigvis samsvarer med filtypen dersom det er opp til hvermansen å laste opp.

Endret av Nazgul
Lenke til kommentar
Gjest Slettet+142
Trur du har misforstått mariyo. Hashing er ikke for å beskytte deg mot slike tilfeller, men mot rainbow-attacks. Da gjør du det mye vanskeligere om crackeren må finne ut en unik streng i tillegg; enda vanskeligere blir det om du har én statisk salt, pluss én basert på dynamiske verdier.

 

For å knekke en hasha string uten å bruke rainbow-tables/dictionary-attacks skal det (for å kraftig underdrive) jævlig mye til, både i tid og prosessorkraft. Når du i tillegg dobbeltsalter stringen din, blir det nærmest umulig.

9173664[/snapback]

Hmm. Bah :wallbash:

Endret av Slettet+142
Lenke til kommentar

Trenger hjelp med en nettbutikk jeg lager:

 

På en side, handlekurven, så hentes alle produktene man har lagt til i handlekurven sin ut. Altså, legges litt info om produktet i en tabell i databasen sammen med IP'en til en person - så hentes produktene ut med WHERE ip = '$ip' hvis dere skjønner.

 

Pris er også et av feltene i tabellen. Etter while løkka hvor produktene hentes ut vil jeg gjerne at det skal stå en samlet pris.

 

Tabellen:

CREATE TABLE `tempcart` (
 `id` int(11) NOT NULL auto_increment,
 `ip` varchar(255) NOT NULL,
 `product` varchar(255) NOT NULL,
 `productid` varchar(255) NOT NULL,
 `price` varchar(255) NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

 

Trenger dere koden som jeg bruker til while-løkka og sånt for å hjelpe?

 

Takker! Ville vært kjempefint om noen kunne hjulpet meg :)

 

 

(Si ifra om dere ikke helt skjønte det her. Vet det ble litt merkelig skrevet)

Lenke til kommentar

Kan du ikke bare kjøre en select SUM('price') i spørringa?

 

Eventuelt med php:

<?php
$total=0;

while($row=...)
{
   /*foo's, baz', spam and eggs here*/
   $total += $row['price'];
}
echo 'totalprisen er på ', $total, ' kroner';
?>

Lenke til kommentar

EDIT:

Ok, må slutte å svare på tråder uten å refreshe når man har vært borte en kort tur...

 

 

$sum = 0.0;

while( $row = mysql_fetch_assoc( $result ) )
{
 //skriv ut produktene
 $sum += $row['price'];
}

echo $sum;

 

Finnes også en egen funksjon i mysql som kan summere, men ettersom du allerede henter ut alle radene, kan du like gjerne summere manuelt.

Endret av Nazgul
Lenke til kommentar

Takker for svar, men fikk ikke helt til.

 

$ip = $_SERVER['REMOTE_ADDR'];
$cart2 = mysql_query("SELECT * FROM tempcart WHERE ip = '$ip' ORDER BY id DESC");

<?php
$total=0;

while($row = mysql_fetch_array($cart2)) {
  $total += $row['price'];
}
echo 'totalprisen er på ', $total, ' kroner';
?>

Tror ikke jeg fikk til helt, for nå har jeg 20 produkter i handlekurven min og hvert av de produktene koster 1595,- (bare på testing) og totalprisen ble på 0,-

(Hvis det skulle ha vært riktig, ville de jeg lager nettbutikken for tapt mye penger ;p)

 

Noe jeg har gjort galt der, eller..?

Lenke til kommentar

Har du skjekka at whilen looper 20 ganger? Kanskje queryen ikkje virker som den skal, eller at 'price' ikkje er satt i $row.

 

Vil anbefale å bruke ip + session id for å identifisere ein brukar slik at fleire brukara fra samme hus kan vere på nettbutikken samtidig.

Lenke til kommentar

$ip = $_SERVER['REMOTE_ADDR'];
$cart2 = mysql_query("SELECT * FROM tempcart WHERE ip = '$ip' ORDER BY id DESC");

 

Den der er fyfy. Det er faktisk mulig å forfalske REMOTE_ADDR (men hackeren vil da ikke få noe respons i retur), slik at den SQLen er åpen er exploits.

 

 

Tenk deg en god hacker som kunne satt sin REMOTE_ADDR til noe ala

$_SERVER['REMOTE_ADDR'] = "1' or ip IS NOT NULL #";

som vil føre til følgende spørring:

SELECT * FROM tempcart WHERE ip = '1' or ip IS NOT NULL #' ORDER BY id DESC"

var det mest banal eksemplet jeg kom på, men viser at du alltid må validere input fra brukeren, sjekke at det virkelig er en ip, i dette tilfellet.

Endret av dabear
Lenke til kommentar
Gjest Slettet+142

Det skal være nok for sikkerheten.

Men du kan jo alltids lage en funksjon som valider om det faktisk er en ipadresse eller ikke. Hvis du lager en slik funksjon, og funksjonen skulle oppdage at "ipadressen" ikke er en ekte ipadresse, har du jo f.eks muligheten til å logge dette, skrive output som om f.eks at fake IP er oppdaget, og så avslutte utførelsen av programmet :)

 

Her er en validIP-funksjon jeg fant her :)

function Val_ip ($String) {
// Check that given string is a valid IP number.
if (long2ip (ip2long ($String)) != $String) {
 // Wasn't, return error.
 return false;
}

// Everything was OK, return string.
return $String;
}

Endret av Slettet+142
Lenke til kommentar
Gjest Slettet+6132
Her er en validIP-funksjon jeg fant
For å gjøre det helt korrekt burde man vel også ha en sjekk i den funksjonen som returnerer false på 127.0.0.0/8, 169.254.0.0/16, evt. 10.0.0.0/8, 172.16.0.0/12 og 192.168.0.0/16 (kanskje også 224.0.0.0/4 (klasse D-iper som er for multicast). Disse IPene vil i de fleste tilfeller ikke bli brukt mot en webserver (med mindre du surfer over LAN selvsagt), og burde da gjelde som false. Noen som er enige? :roll:

 

Kilde for loopback (127.0.0.0/8)

Kilde for private IPer (10.0.0.0/8, 172.16.0.0/12 og 192.168.0.0/16)

Kilde for zeroconf (også dekket av private IPer) (169.254.0.0/16)

Kilde for multicast-IPer (224.0.0.0/4)

Lenke til kommentar
Gjest Slettet+6132
Du må gjerne fikse funksjonen så den gjør det :tease:
Erhm, klokken er 03:20, utorrent.exe suger 3.1MB/s med data, ETA er 30 sec ... and I'm off to watch a certain movie ;)
Lenke til kommentar
Gjest Slettet+142

Bah. Jeg gidder ikke prøve meg på å fikse den engang ^^ Skal sove nå :)

 

Men uansett.. Innleggstelleren din viser (1)666 :p

Lenke til kommentar
  • 2 uker senere...

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...