Avatar billede zacho112 Nybegynder
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!
Avatar billede coderdk Praktikant
27. maj 2006 - 17:45 #1
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 ;)
Avatar billede zacho112 Nybegynder
27. maj 2006 - 17:49 #2
Nej, glob finder den ikke, men ved at skrive ?p=../blah kan man finde den...
Og det er ikke så smart :P
Avatar billede coderdk Praktikant
27. maj 2006 - 18:16 #3
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
Avatar billede zacho112 Nybegynder
27. maj 2006 - 18:47 #4
ja, men hvordan har ham her lavet dette ??
http://www.sikker-hansen.dk/source.php?p=config.php
Avatar billede coderdk Praktikant
27. maj 2006 - 19:02 #5
Dunno
Avatar billede leif Seniormester
27. maj 2006 - 19:38 #6
Har du prøvet at skrive til ham og hørt ad ?
Avatar billede zacho112 Nybegynder
27. maj 2006 - 20:14 #7
yes, men intet svar endnu, og skal bruge det hurtigt, så derfor spurgte jeg os herinde :P
Avatar billede leif Seniormester
27. maj 2006 - 20:17 #8
Hvis du finder en løsning hører jeg meget gerne om det.
Avatar billede zacho112 Nybegynder
27. maj 2006 - 20:18 #9
yes, skal jeg kontakte dig, eller bare skrive det herinde?
Avatar billede zacho112 Nybegynder
27. maj 2006 - 20:18 #10
kontakt pr. mail altså
Avatar billede leif Seniormester
27. maj 2006 - 20:24 #11
Bare herinde så kan alle lære noget af det.
Avatar billede coderdk Praktikant
27. maj 2006 - 20:59 #12
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 );
Avatar billede zacho112 Nybegynder
27. maj 2006 - 21:13 #13
vil du så smide det ind i min source fil?
Avatar billede leif Seniormester
27. maj 2006 - 22:15 #14
Jeg tror umiddelbart det skal bruges i stedet for show_source
Avatar billede leif Seniormester
27. maj 2006 - 22:25 #15
Du kan se en test på: www.ljnet.dk/exp/712139/?p=config.php
Avatar billede leif Seniormester
27. maj 2006 - 22:27 #16
Men kan ikke lige gennemskue hvorfor den skriver 1 efter den har brugt highligt_string
Avatar billede zacho112 Nybegynder
27. maj 2006 - 22:40 #17
Nej kan jeg heller ikke lige
Avatar billede zacho112 Nybegynder
27. maj 2006 - 22:49 #18
Har fået det til at virke som jeg vil, men kan ikke få den til at fjerne det der grimme 1 tal :S
Avatar billede zacho112 Nybegynder
27. maj 2006 - 22:50 #19
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?>
Avatar billede zacho112 Nybegynder
27. maj 2006 - 22:51 #20
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?
Avatar billede leif Seniormester
27. maj 2006 - 22:52 #21
Cool. men hvorfor bruger du ikke bare samme kode til at vise eller filer med ? I stedet for at tjecke hvilken fil det er ?
Avatar billede leif Seniormester
27. maj 2006 - 22:54 #22
Synes coderdk bare skal have det !
Avatar billede zacho112 Nybegynder
27. maj 2006 - 23:10 #23
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
Avatar billede leif Seniormester
27. maj 2006 - 23:22 #24
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.
Avatar billede zacho112 Nybegynder
27. maj 2006 - 23:40 #25
ja okay
Avatar billede coderdk Praktikant
28. maj 2006 - 00:48 #26
Svar herfra :)
Avatar billede zacho112 Nybegynder
28. maj 2006 - 10:08 #27
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
Avatar billede leif Seniormester
28. maj 2006 - 10:30 #28
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);
}
?>
Avatar billede zacho112 Nybegynder
28. maj 2006 - 10:45 #29
yes den virker ;)
Og tak for det :P I går var jeg sgu for træt til selv at rette den :P
Avatar billede coderdk Praktikant
28. maj 2006 - 15:27 #30
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)
Avatar billede zacho112 Nybegynder
28. maj 2006 - 16:47 #31
Tak for det :)
Kunne jeg få dig til at forklare resten er preg_replace delen?
fx hvad
(.*?\);
/i
osv gør :P
Avatar billede coderdk Praktikant
28. maj 2006 - 17:29 #32
mysql_p?connect matcher mysql_connect og mysql_pconnect \(.*?\); matcher ( og alt imellem indtil ); /i er case insensitive
Avatar billede zacho112 Nybegynder
28. maj 2006 - 18:44 #33
Mange tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester