notorled Skrevet 10. mars 2010 Del Skrevet 10. mars 2010 (endret) Hei! Er veldig ny med PHP, og har i det siste jobbet litt med mitt eget mailscript. Tingen er at jeg har lest litt rundt om og skjønt at mange mailscript skrevet i PHP ikke er så sikre og kan lett missbrukes.. og da blir jeg urolig selvsakt.. Så jeg lurte bare på hvor sikkert dette scriptet er og hva som muligens kan utnyttes.. Bruksområde / Intro: Jeg skrev dette med tanke på bruk av YubNub Commandline tools. "Send" funksjonen i YubNub fungerer på den måten at den sender en mail til din spesifiserte mottaker. Problemet er at denne mailen (pga. avsenderadressen) ender opp i junkmail folderen hos de fleste mottakere. Jeg hadde heller ikke noe behov for å være anonym hvis jeg skulle sende korte meldinger. Workaround var da å bruke mitt eget domene og bruke "!"- funksjonen(for private funksjoner, via yahoo search). Bruksmåte: ! send [email protected] Passord Alt som kommer etter det 2.ord blir brødtekst i mailen. Som nevnt over er jeg veldig ny i PHP og de fleste finner denne koden sikkert veldig rotete.. <?php /* Php QuickMailer by Delroton. Version 0.3 For Private use only. Support @ [email protected] This script is a simle one designed to work with YubNub commandline tools How this script works: simply enter the url /[email protected] PASSWORD Followed by the message you want to send. Then by simply using Yahoo's custom search you can easily replace it with YubNub's "SEND" command. ************************************************************************************************** FLAWS / SECURITY ISSUES: * Password is input in cleartext. CHANGELOG: New Version in the works.. - delroton 11.02.2010 */ //Code start: $text = $_GET["mailer"]; $adress = explode(" ", $text); $email = $adress[0]; $passwd = $adress[1]; $body = str_replace($email . " " . $passwd, " ", $text); $subject = "Message sent using Quick Mail v0.3"; //Configure From adress $headers = "From: \"Ola Nordmann\" <[email protected]>"; // Password check, ALTER THIS TO YOUR PERSONAL AND PRIVATE PASSWORD if($passwd == "secret") { //send mail if password was correct mail($email, $subject, $body, $headers); //echo results echo "<b> Hi! Your following email has been sent:</B>"; echo ""; echo "<hr /></br>"; echo "<b>To:</b> $email"; echo "</br>"; echo "<b>Subject:</B> $subject"; echo "</br>"; echo "<b>Body:</b> $body"; echo "</br>"; echo "<hr /><b>Sent $headers<b>"; } //If password check fails: else { echo "Password Check failed!"; echo "<br>"; echo "Please authorize yourself using the correct method."; echo "<br>"; echo "<i> Having a bad day? </i>"; } //end of code ?> Endret 11. mars 2010 av Delroton Lenke til kommentar
Sec_NB Skrevet 11. mars 2010 Del Skrevet 11. mars 2010 (endret) Hei! Her og nå ser den veldig grei ut! Hadde det vært en idé å brukt mysql_real_escape_strings() der du bruker $_GET? $text = mysql_real_escape_strings($_GET["mailer"]); Forsåvidt det samme på alle variabler som blir satt via. en form eller $_GET... Endret 11. mars 2010 av Sec_NB Lenke til kommentar
Jonas Skrevet 11. mars 2010 Del Skrevet 11. mars 2010 (endret) escape_strings ville vært jævlig praktisk dersom det faktisk var databaser involvert. Ellers ser det ut som at hvem som helst relativt enkelt kan utnytte scriptet ditt til å sende uendelig mengder mail til hvem enn man måtte ønske. Edit: Nevermind, ser nå at du har passordbeskyttet det. Endret 11. mars 2010 av Jonas Lenke til kommentar
Sec_NB Skrevet 11. mars 2010 Del Skrevet 11. mars 2010 Sant det! Passordet bør i det minste krypteres. Lenke til kommentar
notorled Skrevet 11. mars 2010 Forfatter Del Skrevet 11. mars 2010 Sant det! Passordet bør i det minste krypteres. Er md5() ok? Vet at det kan crackes med rainbowtables men føles litt overkill med SHA512 Lenke til kommentar
Crowly Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 (endret) Bare noen generelle kommentarer. //send mail if password was correct mail($email, $subject, $body, $headers); //echo results Dette forutsetter at mail alltid er vellykket/blir sent, og du vil få beskjed om at e-posten er sent selv om mail() returnerer FALSE. Dette løser du f. eks slik //send mail if password was correct if (mail($email, $subject, $body, $headers)) //echo mail sent else // echo mail was not sent Hvis du er opptatt av standard kompatibel html så er det litt lett blanding og små rusk i koden din. F. eks </br> skal være <br> eller <br /> avhengig av standard. Html skal vel også være i lower case. echo "<b>Subject:</B> $subject"; Når du inkluderer variabler i tekst strenger slik som her (over), så bør du sette { } rundt variablene. Det gjør det enklere for php å forstå hvor de begynner og slutter. Men det fungerer ofte greit uten, så dette er pirk. echo "<b>Subject:</B> {$subject}"; // alternativt bruk konkatinering echo "<b>Subject:</B>".$subject; echo "<b>Subject:</B>".$subject."<br />"; Endret 12. mars 2010 av Crowly Lenke til kommentar
Thomas. Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 Er md5() ok? Vet at det kan crackes med rainbowtables men føles litt overkill med SHA512 All slik kryptering kan crackes med programmer. Jo lenger kryptering jo lenger tid tar det å cracke det. Lenke til kommentar
notorled Skrevet 13. mars 2010 Forfatter Del Skrevet 13. mars 2010 Takker for tilbakemeldinger =D Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå