Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: PHP-haasteen koodi suoraan sivulle?

Sivun loppuun

Jaska [28.05.2019 13:04:44]

#

Onko PHP-haastetta mahdollista muuttaa siten, että ratkaisun koodin voisi syöttää tekstilaatikkoon vai onko pakko hankkia joku PHP:tä tukeva kotisivutila?

Grez [28.05.2019 14:26:36]

#

PHP-haasteen yksi hienoushan on se, että sitä ei tarvitse ratkaista PHP:llä vaan homma onnistuu millä tahansa kielellä. Eli sikäli en kannata haasteen muuttamista sellaiseksi, että koodi syötettäisiin tarkistimelle. Toki se voisi olla vaihtoehtona nykyisen lisäksi.

Toteutuksellisesti yksi ongelma ehkä on, että käyttäjät voivat tuupata mitä vaan skriptejä jotka voivat vaikka jäädä ikuiseen looppiin. Mutta ehkä riittävän tiukalla hiekkalaatikolla pyörivä PHP alimmalla prioriteetilla ja lyhyehköllä timeoutilla voisi toimia.

Metabolix [28.05.2019 14:41:42]

#

Voit käyttää PHP:tä omalla koneellasi. Erityisen helppoa tämä on, jos sinulla on IPv6 käytössäsi. (Tässä auttaa Teredo tai Miredo.)

Linuxissa PHP:n sisäinen palvelin IPv6:lla toimii esimerkiksi näin:

# ip -6 address show scope global

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2a03:b0c0:2:d0::4ac:5001/64 scope global
       valid_lft forever preferred_lft forever

# mkdir koodit
# echo '<?php echo $vastaus;' > koodit/ratkaisu.php
# php -S "[2a03:b0c0:2:d0::4ac:5001]:8080" -t koodit
## Osoite: http://[2a03:b0c0:2:d0::4ac:5001]:8080/ratkaisu.php

Resurssi- ja tietoturvakysymysten vuoksi näillä näkymin haasteeseen ei voi lähettää suoraan koodia. Välillä jo näytti, että tämä olisi mahdollista, mutta kun nyt on löytynyt näitä uusia koodin ajoitukseen liittyviä tiedonkalastushyökkäyksiä, joilla voi saada jopa selaimessa JavaScriptilla vakoiltua joitain asioita käyttäjän koneen muistista, mielestäni ei kannata ottaa ylimääräistä riskiä PHP-haasteen kanssa.

Todennäköisempi vaihtoehto on se, että teen sivustolle uuden tehtäväosion, jossa koodin voi ajaa kotikoneella, ja tähän voi sitten tuoda myös PHP-haasteen tehtävät jossain muodossa.

Grez [28.05.2019 16:24:44]

#

Niin tosiaan ikuisen loopin tai muun vahingon rinnalla tietysti tarkoituksellinen pahanteko on vielä suurempi ongelma.

Jaska [28.05.2019 19:07:10]

#

Joo. Tietoturvaan taitaa liittyä liikaa riskejä. Ajattelin vaan, että saako sen tehtyä siten, että palvelin muodostaisi virtuaaliboksin, jossa voisi tehdä mitä lystää. Mutta taitaa olla vaikea tehdä boksia siten, että olisi täysin varma, ettei koodi pääse boksin ulkopuolelle.

AtskaFin [29.05.2019 10:58:43]

#

Sivulta infinityfree saat ilmaisen webhotellin ja domainin. Otat vain sivun antamat tunnukset ja yhdistät ftp:llä palvelimeen. Siinä onkin jo sivu pystyssä.

Jos vielä haluat helpotusta niin codetasty.com on selaimessa toimiva IDE, jolla voi yhdistää palvelimeen.

Metabolix [29.05.2019 14:55:54]

#

AtskaFin: Harmi vain, että tuo palvelu kuitenkin tuottaa jonkin JavaScript-seurantakikkareen, jonka vuoksi sitä ei voi käyttää PHP-haasteessa. Kokeile, jos et usko.

Suosittelen IPv6-yhteyden hankkimista ja koodin ajoa omalla koneella, kuten ensimmäisessä viestissäni neuvoin. Oman IPv6-yhteyden tilan voi tarkastaa esimerkiksi sivulla http://test-ipv6.se/.

The Alchemist [01.06.2019 07:16:32]

#

Metabolix kirjoitti:

AtskaFin: Harmi vain, että tuo palvelu kuitenkin tuottaa jonkin JavaScript-seurantakikkareen, jonka vuoksi sitä ei voi käyttää PHP-haasteessa. Kokeile, jos et usko.

En jaksa kokeilla itse, mutta jos syöttää vastauksen mukana Content-Type-otsakkeen ja väittää tietotyypin olevan vaikka text/plain, niin voi olla, ettei js-kikkareita silloin injektoida. Luulisin että tämä ei vaikuta PHP-haasteen toimintaankaan.

Tegu [01.06.2019 08:47:17]

#

Myös muut ilmaiset sivustot kuten repl.it tai PythonAnywhere toimivat, eivätkä ne pullauta mitään ylimääräisiä seurantakikkareita vastauksiin. Repl.it tukee useampaa kieltä, mutten tosin tiedä, saako kaikilla niillä tehtyä web-palvelun. Toki valmiilla palveluilla ei opi tunkkaamaan omaa palvelintaan pystyyn (IPv6:lla tai ilman), mutta sama tilannehan webbihotelleissa olisi.

HTTPS ei näköjään muuten toimi PHP-haasteessa. Kokeilin äsken repl.it:tä, ja PHP-haaste antoi hieman harhaanjohtavan virheilmoituksen:

lainaus:

TESTI 1 ... VIRHE! Palvelimesi palautti oudon vastauksen! (Statuskoodi puuttuu.)

Testi onnistui, kun tajusin muuttaa osoitteen https:stä http:hen.

Metabolix [02.06.2019 21:03:19]

#

Tegu kirjoitti:

HTTPS ei näköjään muuten toimi PHP-haasteessa.

Ongelmana oli, että haaste ei tunnistanut sellaista modernia vastausta kuin ”HTTP/2 200”, mutta nyt tämä puute on korjattu. (Ongelma ylipäänsä alkoi vasta, kun vaihdoin toteutusta IPv6-osoitteita varten.)

The Alchemist kirjoitti:

En jaksa kokeilla itse, mutta jos syöttää vastauksen mukana Content-Type-otsakkeen – –

Kyseinen palvelu tuottaa ensimmäisellä sivunlatauksella oman HTML-sivun, jossa on JS-koodia, joka asettaa seurantaevästeen. Ilmaisille sivuille ei ilmeisesti pääse ilman oikeaa seurantaevästettä. Koska eväste luodaan JS:llä, ei edes riitä ratkaisuksi ylimääräinen sivunlataus ja tavallisten evästeiden muistaminen, vaan pitäisi vielä ajaa JS-koodi... Eli tuo palvelu ei sovellu PHP-haasteen kanssa käytettäväksi.

walkout_ [10.06.2019 04:28:38]

#

Metabolix kirjoitti:

(29.05.2019 14:55:54): AtskaFin: Harmi vain, että tuo palvelu...

En ole varma onko tämä huomautukseni relevantti, mutta eikös kuluttajanettiyhteykissä ole sopimusehdoissa oman palvelimen ajo kiellettyä ja yritysliittymä missä on kiinteä IP-osoite misssä saa pitää palvelointa on niin kallis että sellaista ei kannata hankkia.

Virtual Private Serverin saa hintaan 4.9 € + ALV 24 % / kk ulkomailta ja se ei ole paljon mitään ja riittää varmasti sellaiseen PHP-koodaukseen mikä tarvitaan tämän hasteen suorittamiseen. Ja AWS ei maksa mitään jos siellä ei ole liikennettä ja sitä käyttää vain omaan käyttöön koska se on tuntiveloitteinen siitä paljonko palvelin resursseja menee ja jos niitä ei mene juuri laisinkaan niin ei maksa mitään tai jos maksaa niin paljon yhtään mitään. Mutta AWS (Amazon Web Services) kanssa kanttaa olla varovainen sillä esim. minun kotisivuilla on yli 100 kävijää päivässä ja paljon alidomaineja joissa myös paljon kävijöitä per päivä jonka takia kun sitä kokeilin niin tulikin yli 200 € / kk laskut, joten jouduin irtisanomaan koko hoidon ja vaihtamaan halvempaan palveluun joka on kiinteä kk-maksullinen.

Metabolix [10.06.2019 11:20:34]

#

Palvelimen pito ei ole kiellettyä eikä edes voi olla kiellettyä. Tämä asia on saatu selväksi jo joskus 10 vuotta sitten. Eihän palvelimen pitoa voisi mitenkään kieltää, kun mainostetaan, että liittymät sopivat nettipelaamiseen, ja nettipelaamisessa monissa perinteisissä peleissä jollakulla on se palvelin. Teknisiä rajoituksia tietysti voi olla, ja usein etenkin valokuituyhteyksissä on portit 1–1024 estetty selvästi juuri palvelinkäytön rajoittamiseksi.

Grez [10.06.2019 11:35:47]

#

Tuossa 15 vuotta sitten monilla operaattoreilla oli tosiaan sopimusehdoissa kielletty palvelimen pito, mutta Viestintäviraston kanta oli, että palvelimia sai pitää jos sitä ei oltu teknisesti estetty:

Viestintävirasto 860/531/2003 kirjoitti:

Yksinomaan sopimusehdoissa oleva rajoitus palvelun käytölle saattaa myös jäädä käyttäjälle epäselväksi. Yleisten sopimusoikeudellisten periaatteiden mukaan epäselvää sopimusehtoa tulkitaan sen laatijan vahingoksi. Viestintäviraston näkemyksen mukaan palvelun käyttöä koskevat rajoitukset olisi tästä johtuen hyvä toteuttaa teknisesti ja ilmoittaa näistä teknisistä rajoituksista selkeästi viestintäpalvelun vastaanottamista koskevassa sopimuksessa.

Sittemmin taitaa olla niin että monet operaattorit ovat kokonaan poistaneetkin ehdoista ko. kiellon.

Itse olen kokenut että kielto on alunperinkin ollut siellä lähinnä varmuuden vuoksi - että operaattori voi puuttua asiaan, jos joku pistää pystyyn Youtuben kilpailinjan tai vastaavalla tavalla aiheuttavat todella raskasta kulutusta.

Yhtäkään operaattoria tuskin olisi missään vaiheessa haitannut tai edes kiinnostanut, jos joku on pistänyt liittymäänsä palvelimen PHP-haasteeseen osallistumista varten.

walkout_ kirjoitti:

Virtual Private Serverin saa hintaan 4.9 € + ALV 24 % / kk ulkomailta

Melko tarkkaan laitettu hinta vaikka mitään tiettyä operaattoria ei ole mainittu :D

Mutta joo vois sanoa että 5€/kk suuruusluokalla saa niin suomesta kuin ulkomailtakin.

Esim. suomalaiselta Upcloudilta saa 4,43 € + ALV /kk hinnalla virtuaalipalvelimen saksasta, hollannista, UK:Sta, singaporesta tai yhdysvalloista tai 6,65 € + ALV/kk hinnalla suomesta. Ja maksu menee tunnin tarkkuudella, jos tarvii lyhyen aikaa.

Nämäkään tuskin on ihan alimmat hinnat millä löytyy.

walkout_ [13.06.2019 15:05:05]

#

Leaseweb on se mitä nykyään käytän ja tiedän kyllä Upcloudin koska olen saanut sieltä tajouksen ja heidän palvelut ovat skaalautuvampia kuin Leasewebissä. Mutta Leasewebiastä saa sitä enemmän alennusta mitä pidemällä sopparilla ottaa palvelimen. Esim. jos ottaa 3-vuoden sopparilla niin saa kk-hintaan alennusta aika paljon. Mutta Leasewebisstä saa sellaisia rautapalvelimia mitkä ovat kk-maksultaan yli varojen ja tehoja ja muistia plus kovotilaa niissä piisaa eikä ole kyse mistään pikkupalvelimista.

AtskaFin [16.06.2019 15:04:45]

#

Haluaisin tehdä PHP-haasteen tehtäviä, mutta javascriptillä. Miten saan haasteen hyväksymään js koodit?

Metabolix [16.06.2019 17:46:45]

#

AtskaFin: Haaste lähettää HTTP-pyyntöjä. Voit käyttää mitä tahansa palvelimella ajettavaa ohjelmointikieltä. Jos haluat käyttää JavaScriptia, käytä esimerkiksi Node.js-palvelinta. (Et voi tehdä haastetta niin, että palauttaisit vain JavaScript-koodia sisältävän nettisivun.)


Sivun alkuun

Vastaus

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

Tietoa sivustosta