Dat dus.quote:Op woensdag 7 juni 2006 14:57 schreef fokME2 het volgende:
Waarom heb je eigenlijk phpcode die je wil uitvoeren in je database staan?![]()
Hoe laat je de updates uitvoeren? Via de webserver? Besef dan dat alle bestanden door de webserver schrijfbaar moeten zijn, en dat dit als standaardinstelling natuurlijk niet echt veilig is om een website op te laten draaien. Beter lever je zo'n updatesysteem buiten de webroot om, waarbij er goed wordt gekeken naar de rechten van de bestandenquote:Op woensdag 7 juni 2006 10:54 schreef Swetsenegger het volgende:
Versie controlle tussen website en upgrade server werkt al. Ik zit alleen met het pushen of pullen van de update files en hoe ik dat ga aanpakken.
Op- en aanmerkingen zijn welkom
Nee, de map waar ik denk dat het probleem zit is hoger als de hoogste map waar ik met SSH kan komen...Ik hoop alleen dat er iemand bij die helpdesk zit die weet wat chmodden is, anders zal het nog wel even duren voordat de site weer werktquote:Op woensdag 7 juni 2006 16:01 schreef JeRa het volgende:
@ralfie
Met je SSH-connectie moet je gewoon kunnen inloggen en de rechten weer goed zetten. Jij kunt namelijk alle bestanden en directories waarvan jij de eigenaar bent chmodden. Kun je dit niet, dan moet jouw webhoster nog eens ernstig nadenken over hun opzet
Nee de website trekt een changelog van de update server. en de php moet vervolgens bv function.php aanpassen dmv file() en fwrite endergelijke.quote:Op woensdag 7 juni 2006 16:04 schreef JeRa het volgende:
[..]
Hoe laat je de updates uitvoeren? Via de webserver? Besef dan dat alle bestanden door de webserver schrijfbaar moeten zijn, en dat dit als standaardinstelling natuurlijk niet echt veilig is om een website op te laten draaien. Beter lever je zo'n updatesysteem buiten de webroot om, waarbij er goed wordt gekeken naar de rechten van de bestanden
Dus alle bestanden en directories moeten writable voor de webserver zijn. In het geval van een exploit kunnen kwaadwilligen dan dus eigen PHP-files wegschrijven?quote:Op woensdag 7 juni 2006 16:33 schreef Swetsenegger het volgende:
[..]
Nee de website trekt een changelog van de update server. en de php moet vervolgens bv function.php aanpassen dmv file() en fwrite endergelijke.
De webserver heeft meestal een webroot voor een website wat de hoogst mogelijke directory is waar een bezoeker bestanden mag opvragen. Door een updatescript buiten deze webroot via bv. SSH uit te voeren zou je mogelijke exploits al kunnen voorkomen, maar als je het via de website wilt doen is daar dus geen sprake van.quote:Hoe bedoel je buiten de webroot om?
Neuh, specifieke website bestanden moeten inderdaad writable zijn. Niet alles. Maar dat is inderdaad een risico ja...quote:Op woensdag 7 juni 2006 16:39 schreef JeRa het volgende:
[..]
Dus alle bestanden en directories moeten writable voor de webserver zijn. In het geval van een exploit kunnen kwaadwilligen dan dus eigen PHP-files wegschrijven?
Ik snap nog steeds niet hoe je buiten die webroot bestanden IN de webroot wilt updaten?quote:De webserver heeft meestal een webroot voor een website wat de hoogst mogelijke directory is waar een bezoeker bestanden mag opvragen. Door een updatescript buiten deze webroot via bv. SSH uit te voeren zou je mogelijke exploits al kunnen voorkomen, maar als je het via de website wilt doen is daar dus geen sprake van.
Dit is denk ik zodanig moeilijk (zeker bij meerdere websites tegelijk) dat je echt een gruwelijk goed gedocumenteerde opzet moet hebben om dit vlekkeloos voor elkaar te krijgenquote:Op woensdag 7 juni 2006 16:44 schreef Swetsenegger het volgende:
Het probleem is alleen dat elke website subtiel kan verschillen. Vandaar dat ik de update logica per website wilde schrijven en toevoegen AAN die website.
Daarom maak ik 'generic' files, die zijn voor elke website hetzelfde en zullen het meeste aanpassing vereissen. En daarnaast nog site specifieke files, welke dus met logica OP de website aangepast kunnen worden (de generic files is een kwestie van gewoon overschrijven en kan vanaf de update server).quote:Op woensdag 7 juni 2006 17:12 schreef JeRa het volgende:
[..]
Dit is denk ik zodanig moeilijk (zeker bij meerdere websites tegelijk) dat je echt een gruwelijk goed gedocumenteerde opzet moet hebben om dit vlekkeloos voor elkaar te krijgenje moet namelijk per website weten welke bestanden wat bevatten, en waar je vanaf moet blijven om de boel niet kapot te maken.
Geen, eigenlijk. Gewoon ervoor zorgen dat je geen exploits toestaat door bugvrije scripts te schrijvenquote:Op woensdag 7 juni 2006 17:21 schreef Swetsenegger het volgende:
Maar mbt de exploits, nog ideeen?
group by?quote:Op woensdag 7 juni 2006 18:09 schreef LeeHarveyOswald het volgende:
ik zit weer es vastIk wil 2 velden selecteren, waarvan 1 een naam en 1 een getal. Nu wil ik dat uiteindelijk alle getallen bij elkaar opgeteld zijn, per naam, en gesorteerd. Dus stel ik heb 3 LeeHarveyOswalds, en 2 JeRa's, dan zou ik graag de leeftijden van al deze opgeteld willen zien, gesorteerd ophoeveelheid
![]()
quote:Op woensdag 7 juni 2006 18:09 schreef LeeHarveyOswald het volgende:
ik zit weer es vastIk wil 2 velden selecteren, waarvan 1 een naam en 1 een getal. Nu wil ik dat uiteindelijk alle getallen bij elkaar opgeteld zijn, per naam, en gesorteerd. Dus stel ik heb 3 LeeHarveyOswalds, en 2 JeRa's, dan zou ik graag de leeftijden van al deze opgeteld willen zien, gesorteerd ophoeveelheid
![]()
1 2 3 4 | FROM mensen GROUP BY naam ORDER BY COUNT(naam) ASC |
Ja preciesquote:Op woensdag 7 juni 2006 17:32 schreef JeRa het volgende:
[..]
Geen, eigenlijk. Gewoon ervoor zorgen dat je geen exploits toestaat door bugvrije scripts te schrijven
Een pull vanaf de website lijkt me het beste; omdat je de administrator dan ook inzicht kunt geven in de veranderingen (en bv. een diff kunt tonen als de eigenaar wijzigingen heeft aangebracht in het scriptquote:Op woensdag 7 juni 2006 19:16 schreef Swetsenegger het volgende:
[..]
Ja precies
Of heb je een betere manier voor mij om dit aan te pakken?
Dus, push vanaf update server of pull vanaf website. Of nog iets anders?
Ik wilde de eigenaar inderdaad de mogelijkheid geven om een update niet uit te voeren. wat bedoel je met een diff?quote:Op woensdag 7 juni 2006 19:31 schreef JeRa het volgende:
[..]
Een pull vanaf de website lijkt me het beste; omdat je de administrator dan ook inzicht kunt geven in de veranderingen (en bv. een diff kunt tonen als de eigenaar wijzigingen heeft aangebracht in het script). Bij een push gaat dat nogal geforceerd en geef je de eigenaar weinig vrijheid.
Je moet rekening houden met het feit dat de webserver dus de eigenaar moet zijn van de bestanden die worden gewijzigd; dus ofwel alles onder de user van de webserver scharen of ervoor zorgen dat de webserver draait onder de juiste gebruiker. Zodra je gaat updaten alle directories en files waarbij het nodig is chmodden, aanpassen en weer terug chmodden naar een staat waarbij ze niet aanpasbaar zijn. Mogelijk vóórdat je dit proces uitvoert een .htaccess wegschrijven waarmee het onmogelijk wordt om tijdens het updateproces bestanden op te vragen
Als de eigenaar van een website die door jou wordt verzorgd in een gekke bui iets heeft aangepast in een bestand dat geüpdatet dient te worden, dan gaat dat niet goed natuurlijkquote:Op woensdag 7 juni 2006 19:59 schreef Swetsenegger het volgende:
[..]
Ik wilde de eigenaar inderdaad de mogelijkheid geven om een update niet uit te voeren. wat bedoel je met een diff?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | <input type="text" name="q" /> <input type="submit" name="Submit" value="Search" /> </form> <?php // Get the search variable from URL $var = @$_GET['q'] ; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit=10; // check for an empty string and display a message. if ($trimmed == "") { echo "<p>Please enter a search...</p>"; exit; } // check for a search parameter if (!isset($var)) { echo "<p>We dont seem to have a search parameter!</p>"; exit; } //connect to your database ** EDIT REQUIRED HERE ** mysql_connect("localhost","root",""); //(host, username, password) //specify database ** EDIT REQUIRED HERE ** mysql_select_db("mydb") or die("Unable to select database"); //select which database we're using // Build SQL Query $query = "select * from employees where 1st_field like \"%$first%\" order by 1st_field"; // EDIT HERE and specify your table and field names for the SQL query $numresults=mysql_query($query); $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0) { echo "<h4>Results</h4>"; echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>"; echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Look up " . $trimmed . " on Google\">Click here</a> to try the search on google</p>"; } // next determine if s has been passed to script, if not use 0 if (empty($s)) { $s=0; } // get results $query .= " limit $s,$limit"; $result = mysql_query($query) or die("Couldn't execute query"); // display what the person searched for echo "<p>You searched for: "" . $var . ""</p>"; // begin to show results set echo "Results"; $count = 1 + $s ; // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["1st_field"]; echo "$count.) $title" ; $count++ ; } $currPage = (($s/$limit) + 1); //break before paging echo "<br />"; // next we need to do the links to other results if ($s>=1) { // bypass PREV link if s is 0 $prevs=($s-$limit); print " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><< Prev 10</a>  "; } // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } // check to see if last page if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $news=$s+$limit; echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>"; } $a = $s + ($limit) ; if ($a > $numrows) { $a = $numrows ; } $b = $s + 1 ; echo "<p>Showing results $b to $a of $numrows</p>"; ?> |
quote:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Program Files\xampp\htdocs\sitesmeets\SITE\php\search.php on line 41
1 |
werkt niet, dan zegt hij dit:quote:
1 |
En wat is lijn 41 in je script?quote:Op woensdag 7 juni 2006 21:53 schreef BloodhoundFromHell het volgende:
[..]
werkt niet, dan zegt hij dit:
[ code verwijderd ]
waar voer ik dat uit?quote:Op woensdag 7 juni 2006 21:55 schreef JeRa het volgende:
@Swetsenegger
chown gaat niet lukken, behalve als je root bentje zult vantevoren al de goede gebruiker moeten zijn. Door een `whoami` uit te voeren kom je erachter als wie de webserver werkt
In een PHP-scriptje dat je via de webserver uitvoert:quote:Op woensdag 7 juni 2006 22:08 schreef Swetsenegger het volgende:
[..]
waar voer ik dat uit?
Ik gebruik nu het ftp alternatief, maar dat is (traag) gepijpzeik.
1 2 3 | echo `whoami`; ?> |
Grappig, die kon ik niet.quote:Op woensdag 7 juni 2006 22:09 schreef JeRa het volgende:
[..]
In een PHP-scriptje dat je via de webserver uitvoert:
[ code verwijderd ]
Je bent vergeten de puntkomma achter mysql_query() weg te halen gok ikquote:Op woensdag 7 juni 2006 22:14 schreef BloodhoundFromHell het volgende:
@jera , nog ideeen? of heeft iemand wellicht anders nog een beter zoekscriptje ergens?
Dat is dus mooi kutquote:Op woensdag 7 juni 2006 22:15 schreef JeRa het volgende:
@Swetsenegger
Je kunt de eigenaar van het bestand niet veranderen zonder dat je root bent. Anders is het een kwestie van een simpele chownEn je moet inderdaad vanuit beginsel de bestanden met een PHP-script vanuit de webserver aanmaken en wegschrijven, anders heb je de verkeerde eigenaar.
Dit soort dingen is de reden waarom ik mod_ruid gebruik op m'n webserver
Dat was meer een compressie en uitpak traject geloof ik.quote:Op woensdag 7 juni 2006 22:24 schreef JeRa het volgende:
Chandler was toch bezig met een project dat precies dat en meer kon doen?
...daar heb je dus rootrechten voor nodig, die de meeste mensen ook niet via FTP hebbenquote:Op woensdag 7 juni 2006 22:27 schreef Swetsenegger het volgende:
de eigenaar veranderen
*vloekt zachtjes*quote:Op woensdag 7 juni 2006 22:30 schreef JeRa het volgende:
[..]
...daar heb je dus rootrechten voor nodig, die de meeste mensen ook niet via FTP hebben
Ehmz... is stap 2 niet het zwakke punt in dit betoog?quote:Op woensdag 7 juni 2006 22:46 schreef JeRa het volgende:
Oh, truuk om van eigenaar te veranderen bestaat wel trouwens.
1) Lees het hele bestand naar het geheugen
2) Verwijder het bestand
3) Maak het bestand opnieuw aan (gebruiker is nu de webserver als je dit via een PHP-script doet)
4) Schrijf de data in het geheugen weer weg naar het bestand
Bestanden verwijderen is mogelijk als je de eigenaar van de bovenliggende directory bentquote:Op woensdag 7 juni 2006 22:53 schreef Swetsenegger het volgende:
[..]
Ehmz... is stap 2 niet het zwakke punt in dit betoog?
Hmz ja dat kan dat ik de file via ftp functies in php verwijder en vervolgens met fwrite weer gewoon schrijf.quote:Op woensdag 7 juni 2006 22:58 schreef JeRa het volgende:
[..]
Bestanden verwijderen is mogelijk als je de eigenaar van de bovenliggende directory bentmiddels FTP moet dat dus lukken.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | <input type="text" name="q" /> <input type="submit" name="Submit" value="Search" /> </form> <?php // Get the search variable from URL $var = @$_GET['q'] ; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit=10; // check for an empty string and display a message. if ($trimmed == "") { echo "<p>Please enter a search...</p>"; exit; } // check for a search parameter if (!isset($var)) { echo "<p>We dont seem to have a search parameter!</p>"; exit; } //connect to your database ** EDIT REQUIRED HERE ** mysql_connect("localhost","test",""); //(host, username, password) //specify database ** EDIT REQUIRED HERE ** mysql_select_db("bhfhnet_mydb") or die("Unable to select database"); //select which database we're using // Build SQL Query $query = "select * from employees where first like \"%$trimmed%\" order by first"; // EDIT HERE and specify your table and field names for the SQL query $numresults=mysql_query($query); $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0) { echo "<h4>Results</h4>"; echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>"; echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Look up " . $trimmed . " on Google\">Click here</a> to try the search on google</p>"; } // next determine if s has been passed to script, if not use 0 if (empty($s)) { $s=0; } // get results $query .= " limit $s,$limit"; $result = mysql_query($query) or die("Couldn't execute query"); // display what the person searched for echo "<p>You searched for: "" . $var . ""</p>"; // begin to show results set echo "Results "; $count = 1 + $s ; // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["1st_field"]; echo "$count.) $title" ; $count++ ; } $currPage = (($s/$limit) + 1); //break before paging echo "<br />"; // next we need to do the links to other results if ($s>=1) { // bypass PREV link if s is 0 $prevs=($s-$limit); print " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><< Prev 10</a>  "; } // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } // check to see if last page if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $news=$s+$limit; echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>"; } $a = $s + ($limit) ; if ($a > $numrows) { $a = $numrows ; } $b = $s + 1 ; echo "<p>Showing results $b to $a of $numrows</p>"; ?> |
ik ben erachter gekomen dat ik niet met chmod, maar met dit grapje mijn hele website heb verkloot. Omdat door een foutje geen bestandsnaam is toegevoegd heeft php de rootdirectory ingelezen als bestand, toen de directory verwijdert en daarna een bestand aangemaakt met de inhoud van het mapbestand. Keertje checken op is_dir() is dus geen overbodige luxequote:Op woensdag 7 juni 2006 22:46 schreef JeRa het volgende:
Oh, truuk om van eigenaar te veranderen bestaat wel trouwens.
1) Lees het hele bestand naar het geheugen
2) Verwijder het bestand
3) Maak het bestand opnieuw aan (gebruiker is nu de webserver als je dit via een PHP-script doet)
4) Schrijf de data in het geheugen weer weg naar het bestand
Sorry, maar... LOLquote:Op donderdag 8 juni 2006 10:28 schreef ralfie het volgende:
[..]
ik ben erachter gekomen dat ik niet met chmod, maar met dit grapje mijn hele website heb verkloot. Omdat door een foutje geen bestandsnaam is toegevoegd heeft php de rootdirectory ingelezen als bestand, toen de directory verwijdert en daarna een bestand aangemaakt met de inhoud van het mapbestand. Keertje checken op is_dir() is dus geen overbodige luxe![]()
ja, idd, LOLquote:
Op de manier zoals jij het doet krijg je ofwel een query per woord of een UNION oid, en het wordt lastig om daar een score aan toe te kennenquote:Op donderdag 8 juni 2006 17:18 schreef LeeHarveyOswald het volgende:
Ik ben mezelf behoorlijk vast aan het programmeren... Wat ik in totaal wil (waar ook de eerdere vragen voor waren) is zoiets als dit:
1. Ik selecteer uit database 'words' de id keys van een aantal woorden (keywords die ingevuld zijn in form).
2. Uit een andere tabel ('Sites')ga ik dus opzoek naar die keywords, dit moet in "and" vorm gebeuren, daaruit wil ik de sites selecteren waar En keyword X, en Keyword Y, Z, ... voorkomen. Dit moet per site op punten gegroepeerd worden, en gesorteerd.
Hoe ga ik dit qua query aanpakken?![]()
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |