Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Sivun "suojaus" ja kuvan generointi

Sivun loppuun

vee [22.04.2007 16:04:11]

#

1) Kuinka voin suojata yhden tai useamman .php -tiedoston niin, että se toimii ja näkyy niinkuin pitääkin kun se includetaan pääsivulta (esim. index.php:ssä include("sisalto.php"); ), mutta jos jostakin tietää kirjoittaa osoiteriviin suoraan sisalto.php, tulisi virheilmoitus tai ei näkyisi mitään?

2) Epäonnisella Googlen käytöllä en ole löytänyt mitään simppeliä tutoriaalia (tai vastaavaa) jolla saisin generoitua sanoista pienehköjä kuvia. Tarkoitus olisi generoida rand:lla numero- ja kirjainyhdistelmiä kuvaksi ja tällä suojata mm. vieraskirjan väärinkäyttö, kuten useilla sivuilla on tehtykin.

Grez [22.04.2007 16:09:36]

#

1) Oletuksenahan ei näy mitään. Eli jos siellä on vain <?php alussa ja lopussa ?> ja välissä vain funktioita, niin mikäpä siitä mitään tuottaisi selaimeen? Siis olettaen että pääte on se .php

2) Opettele käyttämään GD-kirjastoa. Olisiko hakusanoista apua googletukseen.

Heikki [22.04.2007 16:22:16]

#

Myös putkasta löytyy opas GD:n käyttöön.

Quirzo [22.04.2007 16:41:35]

#

Eli siis tuossa 1. kohdassa, laita sinne sisalto.php tiedostoon vain funktioita.
Näin ei tapahdu mitään, jos ei nimenomaan kutsu tiettyä funktiota koodista.

Teuvo Töhvelö [22.04.2007 19:44:01]

#

Kehoittaisin miettimään, onko ylipäänsä mitään ongelmaa, jos surffaaja näkee tuon sisältö.php-tiedoston sisällön. Mikäli siinä on pelkkää XTHML:ää, niin minun mielestäni mitään ongelmaa ei ole. Jos taas siellä on jotain suoritettavaa php-koodia - joka on siis ihan muutakin kun pelkkiä echo-komentoja - kannattaisi ehkä miettiä onko sivuston toteutus järkevällä pohjalla. Itselleni ei nimittäin tule oikein mitään tuollaista tilannetta mieleen - toiminnot kun on näppärintä tehdä funktioiksi, jotka taas voidaan laittaa yhteen funktiot.php-tiedostoon, joka sitten includetetaan mukaan.

Yksinkertaisin tapa on tietysti laittaa tiedosto palvelimella johonkin public_html-kansion ulkopuolelle, josta PHP kuitenkin osaa lukea sen. Tässä vaiheessa viimeistään tulee mieleen, että onko järkevää sijoittaa koko sivun sisältöä public_html-kansion ulkopuolelle: se kuulostaa hieman hassulta.

Pistän nyt tähän alle pari omaa ehdotustani, joissa oletan sinun haluavan sivullesi sisalto.php:ssä sijaitsevan XHTML-koodin:

Yksi tapa on tehdä siihen tyyliin kuin Quirzo esittikin, eli on vaikkapa näytäSisältö()-funktio, jota sitten kutsutaan pääskriptissä sopivassa kohden, vaikkapa: näytäSisältö("etusivu"). Tuo funktio sitten hommaa jostain (vaikka tavallisista tekstitiedostoista) halutun sivun sisällön.

Toinen tapa on minun mielestäni astetta purkampi, mutta myös helpompi toteuttaa. Siinä tuossa sisältö.php:ssa olisi tällaista koodia:

$sisältö = "<h2>Tämä on sivun HTML-sisältö.</h2>
<p>Tätä voi kirjoitella niin paljon kuin jaksaa.</p>";

sitten on olemassa rakenne.php-niminen tiedosto, joka toimii ikäänkuin sivupohjana. Siinä on normaalia XHTML-koodia ja sitten tulostuskomento:

<div id="asia">
<?php echo $sisältö; ?>
</div>

Pääskriptissä tehdään sitten jotensakin tähän tyyliin:

include("sisältö.php");
include("rakenne.php");

Tietenkin joku voi haluta katsoa tuota rakenne.php:ta selaimellaan ja se onnistuukin, mutta mitään haittaahan siitä ei aiheudu kun pistää noihin tulostuskomentoihin jonkunlaiset virheentarkistukset. Vaikkapa:

<div id="asia">
<?php isset($sisältö) ? echo $sisältö : echo ""; ?>
</div>

vee [23.04.2007 02:57:23]

#

Tuohon ensimmäiseen kohtaan vielä vähän tarkennusta. /index.php:ssä on sivulle itselleen salasanasuojaus PHP:llä toteutettuna (loginin tarkistukseen oma tiedostonsa jossa ei ole muuta kuin <?php ... ?> sisältöä) mutta kun login on hoidettu, näyttää index.php sen "oikean" sivun sisällön tästä includetusta tiedostosta. Ideana olisi siis se, että jos joku sattuu toteutustavan ihan hatusta arvaamaan ja sisalto.php:n nimen vielä, ei hän pääsisi kiertämään salasanaa. Tottakai tällä tavalla sisalto.php:sta puuttuisi lähes kaikki XHTML:n aloitus ja lopetus koodista (<html>, <body>, etc) mutta sivuista saisi silti ehkä jotain tolkkua.

Tiedä sitten onko tämä se fiksuin mahdollinen tapa toteuttaa asia, mutta noin äkkiseltään tuntuu suht' toimivalta enkä mitään järjettömiä tietomurtoyrityksiäkään ole odottamassa. Ja oppimassahan tässä ollaan ;)

ajv [23.04.2007 08:44:41]

#

Tuo sivun suojaus:

*** index.php
<?php
define('NOT_HAXOR', TRUE);
include('sisalto.php');
?>
*** sisalto.php
<?php
if(!defined('NOT_HAXOR')) exit('H4x0r!');

//muut koodit ja suojattu sisältö
?>

vee [24.04.2007 16:08:30]

#

Jes, suojaus hoitui tuolla ja GD:n toiminnot alkavat hahmottumaan pikku hiljaa myös. Kiitos avuista! :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta