Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: curl_exec()

Sivun loppuun

temu92 [04.11.2007 01:02:02]

#

Yritin laittaa modin phpbb3 foorumisoftaan ja sain sen jopa laitettua. Mutta nyt se valittaa

Warning: curl_exec() has been disabled for security reasons in /home/goldenjo/public_html/wow/wow/phparmory/phpArmory.class.php on line 293

Modin tarkoituksena olis (yllätys) hakea wowarmorysta wowiukon tiedot ja näyttää ne. Miten saan ton korjattua vai onko ongelma palvelimessa (joka on futuronin)?

juha127 [04.11.2007 01:09:40]

#

Ihan maalaisjärjellä sanoisin tuosta, että palvelimella on estetty curl_exec-funktion käyttö turvallisuussyistä.

temu92 [04.11.2007 01:29:11]

#

No joo sen kyl mäkin tajusin mut miten sen saa korjattua. Pitäiskö kysyä Futuronilta et mitä pitäs tehä? Vai pitäskö olla ilman sitten tota modia... Se vaan on nii siisti :|

LaNu [04.11.2007 03:26:43]

#

temu92 kirjoitti:

No joo sen kyl mäkin tajusin mut miten sen saa korjattua. Pitäiskö kysyä Futuronilta et mitä pitäs tehä? Vai pitäskö olla ilman sitten tota modia... Se vaan on nii siisti :|

Voin kertoa, että vastaus on: "Hanki meidän virtuaalipalvelin." Webhosteihin tuo ei heillä enää kuulu, piste. Ottivat valikoimiinsa virtuaalipalvelimet ja ihan sattumalta totesivat curl_exec-funktion samalla tietoturvauhaksi. En siitä sen enempää alkanut rettelöimään, kun mikään tällä hetkellä valmis scripti ei sitä tarvitse. Olin kyllä testaillut jo curlia, mutta kun taas tauon jälkeen kaivoin tuon scriptin työstettäväksi, ei homma toiminutkaan. Sinällään vähän harhaan johtavaa, että curl on asennettuna, mutta curl_exec-funktio kiellettyjen listalla.

En tiedä, mikä on wowarmory (olen kuullut huhuja jostain wow-nimisestä pelistä), mutta jos tiedon haku ei vaadi html-lomakkeen lähettelyä, niin esim. file_get_contents-funktio korvaa curlin.

Jos jollain on tietoa curl_exec aiheuttamasta tietoturvauhasta ja sen todellisesta luonteesta, niin kuulisin mielelläni :-)

temu92 [04.11.2007 11:58:54]

#

Yritetään tota file_get_contentsia sitten...

Edit: Jotain käyttöohjetta tohon, ku en saa toimimaan. PHP:n manuaalista oon kattonu jo ja mul on se laitettu tällai

$con = array("http" => array("header" => "Accept-Language: $lang,$lang-$lang;" ,),);
ini_set("default_socket_timeout", $timeout);
$f = file_get_contents(urlencode($url), FALSE, stream_context_create($con));

ja erroria heittää
Warning: file_get_contents() expects at most 2 parameters, 3 given in /home/goldenjo/public_html/wow/wow/phparmory/phpArmory.class.php on line 297
Eli se haluaa enintään ottaa 2 parametriä?

2 parameetterin kanssa se ei toimi, ei mitään erroria mut ei se saa niitä tietojakaan esiin

http://wow.goldenjoke.org/viewtopic.php?f=2&t=2 <-- käykää kattomassa

Edit2: Jahas, futuronin hostissa olikin php versio 4.4.7 ja toi contexti tartti version 5.0.0

temu92 [04.11.2007 13:36:45]

#

Joku antais jonku vinkin miten sais tän koodin muutettua käyttämään vaikka just tota file_get_contentsia

<?php
$ch = curl_init();
$timeout = $this->timeout;
$userAgent = $this->userAgent;

curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Accept-Language: ".$lang.",".$lang."-".$lang.";"));

$f = curl_exec($ch);

curl_close($ch);
?>

LaNu [04.11.2007 18:13:32]

#

temu92 kirjoitti:

Joku antais jonku vinkin miten sais tän koodin muutettua käyttämään vaikka just tota file_get_contentsia

Näillä tiedoilla näyttäisi, että tuossa ei käytetä cookieta eikä kirjauduta lomakkeella. CURLOPT_RETURNTRANSFER tekee sen, että curl_exec-paluuarvo on palvelimen palauttama sivu. Tällaista kokeilisin ensiksi:

<?php
$f = file_get_contents( $url );
?>

Edit: Jos tuolla headerin kieli-ilmoituksella on merkitystä, et voi tätä funktiota käyttää. Joudut tekemään tuon socketin avulla. Siinä en osaa minä auttaa, kun en niitä ole koskaan käyttänyt :-)

temu92 [04.11.2007 22:36:40]

#

http://wow.goldenjoke.org/viewtopic.php?f=2&t=2 no tosta osotteesta näkee nyt mitä se sanoo vaan vaikka on toi laitettu ihan toillai niinku postasit

LaNu [05.11.2007 00:43:07]

#

temu92 kirjoitti:

http://wow.goldenjoke.org/viewtopic.php?f=2&t=2 no tosta osotteesta näkee nyt mitä se sanoo vaan vaikka on toi laitettu ihan toillai niinku postasit

Kuten sanoin, jos tuolla headerissä määritellyllä kielellä on väliä, niin tuo ratkaisu ei toimi sellaisenaan. Sitten voi alkaa pohtia, onko helpompi puukottaa koodia muualta niin, että se toimii toisella kielellä vai muuttaa tuo kohta toimimaan socketeilla.

https://www.php.net/manual/en/ref.sockets.php

Tuosta jälkimmäisestä esimerkistä on varmaan aika helppo soveltaa tähän tarkoitukseen. $f-muuttujaan pitäisi saada serverin vastaus headeria lukuunottamatta.

tsuriga [05.11.2007 01:00:08]

#

En tie, miten tuo plugini, jota yrität saada toimimaan, toimii, mutta jos sen on vain tarkoitus hakea tuo data XML-parsintaa varten niin file_get_contents käy. Helppohan tuota dataa on myös itse parsia DOMilla (PHP5). Futuronilta voi pyytää domainin siirtämistä PHP5 serverille.

temu92 [05.11.2007 10:00:55]

#

Lähetin nyt futuronille kyselyn että saisko curl_execin ja php5:n päälle... Katotaan mitä sieltä tulee vastaukseks :P

tsuriga [05.11.2007 10:05:44]

#

PHP5 servulla eio curl_exec sallittu. Etkä kyllä sitä minusta tarvitsekaan, file_get_contents (allow_url_fopen on päällä) riittänee mainiosti.

EDIT: Paha sanoa mittää kun ei tiedä tarkemmin tuon pluginin toiminnasta. Heitä suora linkki siihen niin katton.

temu92 [05.11.2007 10:53:56]

#

http://www.phpbb.com/community/viewtopic.php?f­=70&t=576155 siinä on sivu
http://killermonkeys.net/teste.php ja tässä miten sen pitäisi toimia

Edit: Joo, curl_execiä ei saa päälle... Pitää sit yrittää vaan jotenki muuten :D

tsuriga [05.11.2007 11:07:24]

#

// phpArmory.class.php
class phpArmory {
  public function xmlFetch( $url )
  {
    return ( ( $result = file_get_contents( $url ) ) !== false ) ? $result : '';
  }
}

EDIT: Laeppae jos se tuolla toimii. Näkyvyysmääre voisi tietysti olla ehkä private/protected ja metodin nimen edessä alaviiva tässä tapaukessa, mutta en ole varma tarvitseeko jonkun ulkopuolisen kutsua tuota, ja silloin pitäisi tietysti muuttaa kaikki funktiokutsut (yksinkertaisella korvausoperaatiollahan se menisi). PHP4 tyylistä koodia tuo modi, hyvät kommentit, mutta huonot sisennykset.

temu92 [05.11.2007 17:35:05]

#

Ei toiminut toi ja se valitti vielä tosta publicista edessä :P

tsuriga [05.11.2007 18:07:06]

#

Arvelin, että siirsit sinne PHP5 palvelimelle. Juu ei näköjään toimi, nyt kun älysin testata. Tähän HTTP-asiakas -luokkaan kun lisäät (genRequest-metodin $head-arrayihin) ainakin User-Agent otsakkeen (ja ehkä myös kielen), saat haettua saman sisällön kuin cURLilla. Ainakin PHP5-servulla pitäisi onnistua. Otsakkeet on helppo kopioida esim. Firefoxin Live HTTP Headers pluginin konsolista kun lataat tuon wowarmory-sivun selaimellasi.

LaNu [08.11.2007 21:56:35]

#

tsuriga kirjoitti:

Arvelin, että siirsit sinne PHP5 palvelimelle. Juu ei näköjään toimi, nyt kun älysin testata. Tähän HTTP-asiakas -luokkaan kun lisäät (genRequest-metodin $head-arrayihin) ainakin User-Agent otsakkeen (ja ehkä myös kielen), saat haettua saman sisällön kuin cURLilla. Ainakin PHP5-servulla pitäisi onnistua. Otsakkeet on helppo kopioida esim. Firefoxin Live HTTP Headers pluginin konsolista kun lataat tuon wowarmory-sivun selaimellasi.

Miksi muuten kaikki kopioi aina sieltä Firefoxista myös user-agentin? IE:n näyttäminen siinä taitaa joskus ihan oikeasti vaikuttaa, mutta eikö normaalisti olisi fiksumpaa laittaa siihen tieto, mikä sitä yhteyttä oikeasti ottaa? Pisti vaan silmään, kun tuonkin plugarin user-agentista löytyy mozillan rimpsu :-)

tsuriga [09.11.2007 02:59:54]

#

Jos sivusto vaikka vaatiikin oikean selaimen, kun on kerran jaksettu User-Agentin tarkistuskin väsätä. file_get_contents, joka lähettää oletuksena tyhjän UA:n, ei toiminut. Ehdotin Fx-UA:ta ihan vaan siksi, että ite käytän pääsääntöisesti, tiedän mistä se löytyy ja kun sillä testasin niin toimi. Voihan siinä käyttää mitä tahtuu, suosittelen vaan jotain aitoa toimimisen varmistamiseksi. Tosin, se User-Agent-tarkistus lienee tarkoituksella asetettu - voisi päätellä, että eivät tykkää boteista?

Ja sitten - saatoin löytää helpomman ratkaisun - kokeilepa lisätä vaikka sinne luokan konstruktoriin ini_set kuten alla esitetään.

<?php
ini_set('user_agent', 'USER_AGENT_GOES_HERE');

// nyt file_get_contents lähettää asetetun UA:n,
// ts. voit siis ehkä käyttää kuin käyttääkin
// yllä esitettyä xmlFetch-funktion korvaajaa
file_get_contents(...
?>

Jos serveriltä tulee vieläkin muuta kuin sitä oikeaa XML-dataa, niin sitten se vaatii vielä ainakin sen kielen.

temu92 [09.11.2007 09:58:58]

#

Joo, tässä oon yrittäny odotella et ne sais sen sinne php5 palvelimelle mut mitään ei kuulu :|

tsuriga [09.11.2007 10:19:05]

#

file_get_contents löytyy kyllä tuolta PHP4 palvelimeltakin, koodillisesti tuosta pitää vain tiputtaa public edestä, jotta funktio pelaa. Tosin, en ole varma PHP4 servereiden asetuksista - lieneekö allow_fopen_url päällä ja ini_set sallittu..? PHP5 palvelimella ainakin toimi kun testasin.

temu92 [09.11.2007 11:42:48]

#

Kiitti tsuriga!! Ny se toimii täydellisesti :D http://wow.goldenjoke.org/viewtopic.php?t=2 <--- kattokaa


Sivun alkuun

Vastaus

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

Tietoa sivustosta