Gå til innhold

Foto

[Løst] Hvordan bruke PHP Include fra MySql


23 svar i denne tråden

#1 vevo1992

vevo1992

    Bruker

  • Medlemmer
  • 63 innlegg
  •   1. februar 2012

Skrevet 16. februar 2012 - 14:38

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.
?>
  • 0

#2 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 16:04

Generelt:

Er det noe forskjellig fra og hente annen informasjon fra en SQL fil?

http://www.oopschool...PHP6Example.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.

Dette innlegget har blitt redigert av kgun: 16. februar 2012 - 16:25

  • 0

#3 slacky

slacky

    Bruker

  • Medlemmer
  • 882 innlegg
  •   9. november 2008

Skrevet 16. februar 2012 - 16:11

Det du ønsker å bruke er eval("<?php ". $sql['row'] ." ?>");

Dette innlegget har blitt redigert av warpie: 16. februar 2012 - 16:14

  • 0

#4 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 16:13

Ja sikkert :thumbup: .

Ikke lett å huske hva alle funksjonene i PHP gjør.

Dette innlegget har blitt redigert av kgun: 16. februar 2012 - 16:13

  • 0

#5 slacky

slacky

    Bruker

  • Medlemmer
  • 882 innlegg
  •   9. november 2008

Skrevet 16. februar 2012 - 16:18

Sier du det? :p fort gjort å glemme ting når en veksler mellom flere språk.

Dette innlegget har blitt redigert av warpie: 16. februar 2012 - 16:19

  • 0

#6 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 16:21

Du fikk meg til å endre signaturen min. Jeg husker at eval er en litt tricky funksjon som løser en del ting.
  • 0

#7 slacky

slacky

    Bruker

  • Medlemmer
  • 882 innlegg
  •   9. november 2008

Skrevet 16. februar 2012 - 16:25

Det er altid kjekt å hjelpe til ;)
  • 0

#8 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 16:29

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:
  • 0

#9 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 16:36

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.wol...LieAlgebra.html

Tenk at et treff fra Wolfram var like under Wikipedia treffet. :roll: som selvsagt har første plassen :blush:

Dette innlegget har blitt redigert av kgun: 16. februar 2012 - 16:37

  • 0

#10 slacky

slacky

    Bruker

  • Medlemmer
  • 882 innlegg
  •   9. november 2008

Skrevet 16. februar 2012 - 16:39

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

Dette innlegget har blitt redigert av warpie: 16. februar 2012 - 17:20

  • 1

#11 xibriz

xibriz

    Bruker

  • Medlemmer
  • 2 301 innlegg
  •   4. februar 2005

Skrevet 16. februar 2012 - 17:45

Eval is evil!!

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

#12 Sono Juventino

Sono Juventino

    Bruker

  • Medlemmer
  • 1 498 innlegg
  •   12. januar 2005

Skrevet 16. februar 2012 - 17:50

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.

Dette innlegget har blitt redigert av Sono Juventino: 16. februar 2012 - 17:50

  • 0
Juvenorge.com - Norsk supporterside for Juventus FC!

#13 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 18:06

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/m...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.ultramega...tements-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.


Dette innlegget har blitt redigert av kgun: 16. februar 2012 - 18:17

  • 0

#14 Sono Juventino

Sono Juventino

    Bruker

  • Medlemmer
  • 1 498 innlegg
  •   12. januar 2005

Skrevet 16. februar 2012 - 18:53

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.

Dette innlegget har blitt redigert av Sono Juventino: 16. februar 2012 - 18:57

  • 0
Juvenorge.com - Norsk supporterside for Juventus FC!

#15 kgun

kgun

    Bruker

  • Medlemmer
  • 9 883 innlegg
  •   1. mai 2006

Skrevet 16. februar 2012 - 19:04

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.articleno...re/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.

Dette innlegget har blitt redigert av kgun: 16. februar 2012 - 19:10

  • 0

#16 Sono Juventino

Sono Juventino

    Bruker

  • Medlemmer
  • 1 498 innlegg
  •   12. januar 2005

Skrevet 16. februar 2012 - 19:27

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

Dette innlegget har blitt redigert av Sono Juventino: 16. februar 2012 - 19:29

  • 0
Juvenorge.com - Norsk supporterside for Juventus FC!

#17 xibriz

xibriz

    Bruker

  • Medlemmer
  • 2 301 innlegg
  •   4. februar 2005

Skrevet 16. februar 2012 - 19:40

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.
  • 0

#18 slacky

slacky

    Bruker

  • Medlemmer
  • 882 innlegg
  •   9. november 2008

Skrevet 16. februar 2012 - 20:04

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.

Dette innlegget har blitt redigert av warpie: 16. februar 2012 - 20:09

  • 0

#19 xibriz

xibriz

    Bruker

  • Medlemmer
  • 2 301 innlegg
  •   4. februar 2005

Skrevet 16. februar 2012 - 20:55

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

#20 vevo1992

vevo1992

    Bruker

  • Medlemmer
  • 63 innlegg
  •   1. februar 2012

Skrevet 16. februar 2012 - 21:12

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


0 bruker(e) leser denne tråden

0 medlemmer, 0 gjester, 0 skjulte brukere