27. maj 2006 - 16:54
Der er
32 kommentarer og 1 løsning
Fjern password fra min config fil.
Hej, jeg har fil som viser mine php kildekoder, men der er et problem, og det er at man kan komme ind og se passwordet og username osv i min config fil til mysql. Er der en måde, så man kan krypter password osv?? Min "show source" fil ser sådan her ud: <?php echo "Kildekoden:<br>"; if(isset($_GET['p'])){ show_source($_GET['p']); } else{ foreach (glob("*.php") as $filename) { echo "<a href=\"source.php?p=$filename\">$filename</a> <br>"; } } ?> Håber I kan hjælpe!
Annonceindlæg fra Immeo
Hvad med bare at ligge database username/password i en anden fil én tak ude? Altså i ../ så vil din glob() ikke fange den, men du kan stadig require den fra din config fil og bruge variable ;)
Nej, glob finder den ikke, men ved at skrive ?p=../blah kan man finde den... Og det er ikke så smart :P
Hvad med så at lave noget i denne stil: $root = dirname( $_SERVER['SCRIPT_FILENAME'] ); if ( isset( $_GET['p'] ) ) { if ( substr( realpath( $_GET['p'] ), 0, strlen( $root ) ) == $root ) { show_source( $_GET['p'] ); } else { die( 'Uautoriseret adgang' ); } } Så vil man kun kunne se scripts der ligger i samme niveau som dit vis-kilde-script, eller højere
Har du prøvet at skrive til ham og hørt ad ?
yes, men intet svar endnu, og skal bruge det hurtigt, så derfor spurgte jeg os herinde :P
Hvis du finder en løsning hører jeg meget gerne om det.
yes, skal jeg kontakte dig, eller bare skrive det herinde?
Bare herinde så kan alle lære noget af det.
Man kunne vel tænke sig noget i stil med: $fil = file_get_contents( $_GET['p'] ); $fil = preg_replace( "/(mysql_p?connect)\(.*?\);/i", "\\1(\n'***'\t//Server\n,'***'\t//Username\n,\t'***'\t//Password\n);", $fil ); $fil = preg_replace( "/mysql_select_db\(.*?\);/i", "mysql_select_db(\n'***'\t//Databasenavn\n);", $fil ); echo highlight_string( $fil );
vil du så smide det ind i min source fil?
Jeg tror umiddelbart det skal bruges i stedet for show_source
Men kan ikke lige gennemskue hvorfor den skriver 1 efter den har brugt highligt_string
Nej kan jeg heller ikke lige
Har fået det til at virke som jeg vil, men kan ikke få den til at fjerne det der grimme 1 tal :S
Nu virker det, det er bare fordi du ikke skal skrive echo foran. kode: <?php echo "Kildekoden:<br>"; if( empty($_GET['p'])){ foreach (glob("*.php") as $filename) { echo "<a href=\"source.php?p=$filename\">$filename</a> <br>"; } } elseif ($_GET['p'] == "conn.php") { $fil = file_get_contents( $_GET['p'] ); $fil = preg_replace( "/(mysql_p?connect)\(.*?\);/i", "\\(\n'***'\t//Server\n'***'\t//Username\n'***'\t//Password\n);", $fil ); $fil = preg_replace( "/mysql_select_db\(.*?\);/i", "mysql_select_db(\n'***'\t//Databasenavn\n);", $fil ); highlight_string($fil); }else{ show_source($_GET['p']); } php?>
coderdk, smid et svar, du får 50 point, leif du får kun 10, da du kun hjalp med at få koden ind på den rigtige side. Håber det er iorden?
Cool. men hvorfor bruger du ikke bare samme kode til at vise eller filer med ? I stedet for at tjecke hvilken fil det er ?
Synes coderdk bare skal have det !
Okay, så får han det hele vis du synes :)
Grunden til at jeg tjekker om det er conn.php er fordi at hvis der ikke er valgt nogle fil, så viser den alle filer, så man kan se dem :P
tjek evt.
www.denlillekoder.dk/source.php
Men hvorfor ikke bare: <?php echo "Kildekoden:<br>"; if( empty($_GET['p'])){ foreach (glob("*.php") as $filename) { echo "<a href=\"source.php?p=$filename\">$filename</a> <br>"; } } else { $fil = file_get_contents( $_GET['p'] ); $fil = preg_replace( "/(mysql_p?connect)\(.*?\);/i", "\\(\n'***'\t//Server\n'***'\t//Username\n'***'\t//Password\n);", $fil ); $fil = preg_replace( "/mysql_select_db\(.*?\);/i", "mysql_select_db(\n'***'\t//Databasenavn\n);", $fil ); highlight_string($fil); ?> Sådan tror jeg umiddelbart jeg ville have gjort det.
Ja, så har du fået dine point, men leif, den kode du har skrevet det, virker ikke helt, så brugte bare min egen :D
Sorry, den var også utestet, men en testet version som virker hos mig.: <?php echo "Kildekoden:<br>"; if( empty($_GET['p'])){ foreach (glob("*.php") as $filename) { echo "<a href=\"source.php?p=$filename\">$filename</a> <br>"; } } else { $fil = file_get_contents( $_GET['p'] ); $fil = preg_replace( "/(mysql_p?connect)\(.*?\);/i", "\\1(\n'***'\t//Server\n'***'\t//Username\n'***'\t//Password\n);", $fil ); $fil = preg_replace( "/mysql_select_db\(.*?\);/i", "mysql_select_db(\n'***'\t//Databasenavn\n);", $fil ); highlight_string($fil); } ?>
yes den virker ;) Og tak for det :P I går var jeg sgu for træt til selv at rette den :P
btw \\1 henviser til den første gruppe i regex'en altså (mysql_p?connect) \\1 "henter" bare den (hvis det var det der var uklart)
Tak for det :) Kunne jeg få dig til at forklare resten er preg_replace delen? fx hvad (.*?\); /i osv gør :P
mysql_p?connect matcher mysql_connect og mysql_pconnect \(.*?\); matcher ( og alt imellem indtil ); /i er case insensitive
Vi tilbyder markedets bedste kurser inden for webudvikling