christdi Skrevet 15. april 2009 Del Skrevet 15. april 2009 (endret) Hei. Jeg driver å overfører nettstedet mitt fra flate filer over til mysql tabeller. Har laget et system hvor jeg legger inn og ender på innhold via html former med php/mysql. Jeg har en del php kode/scripts som jeg vil dele med andre, og presenterer koden med highlight_string($content) og kjører koden med eval("?>".$content); Lurer på om det er farlig å bruke denne funksjonen. Slik ser koden min ut : connect.php <?php # Variables $username = "username"; $password = "password"; $host = "localhost"; $database = "databasename"; #connects to the MySQL server mysql_connect($host,$username,$password) or die(mysql_error()); mysql_select_db($database) or die(mysql_error()); ?> index.php <?php include('connect.php'); $table=$_GET['table']; $order=$_GET['order']; if(!$order) { $order="title"; } echo "<table border=1><tr><td class=m>"; include("navigation.php"); echo "</td>"; echo "<td valign=top width=800 class=n height=100%>"; if(empty($_GET['table'])) { include("home.php"); } elseif(ereg('phpmysql|scripts_php',$table)) { include("code.php"); } else { include("pages.php"); } echo "</td></tr></table>"; ?> navigation.php <?php $sql = "SHOW TABLES FROM $database"; $result = mysql_query($sql); echo "<font face=cursive>".$_SERVER['SERVER_NAME']."</font>"; echo "<hr class=hr>"; echo "<a class=cd href=http://www.url.com>Home</a><br>"; while ($tables = mysql_fetch_row($result)) { if(ereg('home|code|css|familietre|stats|telefonliste|text',$tables[0])) { } elseif($_GET['table']==$tables[0]) { echo "<a class=cd href=index.php?table=$tables[0]><span class=code><b>".ucfirst($tables[0])."</b></span></a><br>"; } elseif($tables[0]=='siteinfo') { echo "<a class=cd href=index.php?id=1&table=siteinfo>".ucfirst($tables[0])."</a><br>"; } else { echo "<a class=cd href=index.php?table=$tables[0]>".ucfirst($tables[0])."</a><br>"; } } mysql_free_result($result); ?> home.php <? $sql = "SELECT content FROM home WHERE id='1'"; $query = mysql_query($sql) or die(mysql_error()); $result = mysql_fetch_array($query); $content = $result["content"]; echo "<table width=100%><tr><td class=m>$content</td></tr></table>"; ?> code.php <? # Connecting to mysql table $result = mysql_query("SELECT * FROM $table order by $order asc"); $loop = mysql_num_rows($result); for ($i=0; $i<$loop; $i++) { $myrow = mysql_fetch_array($result); $title = $myrow["title"]; $content = $myrow["content"]; $id = $myrow["id"]; if($_GET['id']==$id) { print "<a class=cd href='index.php?id=$id&table=$table'><span class=code><b>$title</b></span></a> | "; } else { print "<a class=cd href='index.php?id=$id&table=$table'>$title</a> | "; } } $id = $_GET['id']; $sql = "SELECT * FROM $table WHERE id='$id'"; $query = mysql_query($sql) or die(mysql_error()); $result = mysql_fetch_array($query); $title = $result["title"]; $date = $result["date"]; $content = $result["content"]; echo "</p><table width=100%>"; echo "<tr><td class=nav1>$title</td><td class=nav1 align=right>Created/Updated: $date</td></tr>"; echo "<tr><td class=m colspan=2>"; highlight_string($content); echo "</td></tr>"; echo "</table>"; echo "<hr class=hr>"; eval("?>".$content); ?> pages.php <? # Connecting to mysql table $result = mysql_query("SELECT * FROM $table order by $order asc"); $loop = mysql_num_rows($result); for ($i=0; $i<$loop; $i++) { $myrow = mysql_fetch_array($result); $title = $myrow["title"]; $content = $myrow["content"]; $id = $myrow["id"]; if($_GET['id']==$id) { print "<a class=cd href='index.php?id=$id&table=$table'><span class=code><b>$title</b></span></a> | "; } else { print "<a class=cd href='index.php?id=$id&table=$table'>$title</a> | "; } } $id = $_GET['id']; $sql = "SELECT * FROM $table WHERE id='$id'"; $query = mysql_query($sql) or die(mysql_error()); $result = mysql_fetch_array($query); $title = $result["title"]; $date = $result["date"]; $content = $result["content"]; echo "</p><table width=100%>"; echo "<tr><td class=nav1>$title</td><td class=nav1 align=right>Created/Updated: $date</td></tr>"; echo "<tr><td class=m colspan=2>$content</td></tr>"; echo "</table>"; ?> Endret 15. april 2009 av christdi Lenke til kommentar
[kami] Skrevet 15. april 2009 Del Skrevet 15. april 2009 ja.. du er vid åpen for sql injection her. bruk mysql_real_escape_string på alle agrumentene du bruker. det betyr at de kan selecte eller inserte hva man vil i tabellen din, og at php skriptet ditt vil execute det. så lenge du sørger for at tabellene dine ikke inneholder skadelig php kode og at ingen kan sette inn hva de vil er du trygg Lenke til kommentar
christdi Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 (endret) Så hvis jeg bytter ut med mysql_real_escape_string er jeg trygg ? Vil dette hindre meg selv å legge inn info i tabellene ? Endret 15. april 2009 av christdi Lenke til kommentar
OIS Skrevet 15. april 2009 Del Skrevet 15. april 2009 Som sagt, bruk mysql_real_escape_string. $table og $order (som burde endres til $orderBy) burde godkjennes.$table fra en liste over godkjente tabeller (for eksempel som array) og $order/$orderBy fra en liste over felt i den tabellen. [*]Du burde ikke legge PHP kode i databasen. Stoler du på dem til å lage PHP kode burde du stole på dem til å bruke ftp eller versjonskontroll. [*]Du burde erstatte alle split og ereg med preg funksjonene. [*]Du kan med noen enkle templating og html funksjoner/klasser splitte opp logikk (model) og presentasjon (view). Du kan da bruke index.php for å sette opp logikk og presentasjoner (controller). [*]Du avslutter et html paragraph (p) element i filen code.php som eg ikke kan se blir startet noe sted. Lenke til kommentar
christdi Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Takk for svar. Jeg skjønner jeg har mye å jobbe med. Har ikke greie på klasser ennå, så det får komme etter hvert. Lenke til kommentar
AlecTBM Skrevet 16. april 2009 Del Skrevet 16. april 2009 Trur han mente CSS klasser og ikke PHP OOP klasser Lenke til kommentar
OIS Skrevet 16. april 2009 Del Skrevet 16. april 2009 Trur han mente CSS klasser og ikke PHP OOP klasser Eg mente PHP klasse for templating (kan lages som funksjon) og funksjoner for html som htmlLink og formSubmit (kan lages som klasse hvis du har et "addon" system for view metoder). 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å