[JS/ASP]Tabel naam meegeven in URL

Pagina: 1
Acties:

  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
Tweakers,

Ik heb een script gemaakt maar nu wil ik 2 maal een variabele meegeven in een URL.

Hieronder even wat code ter verduidelijking

Javasciptje:
code:
1
2
3
4
5
6
7
8
9
10
<script language="javascript">
    function ConfirmDel(id){
       var Delete_item
       Delete_item = window.confirm("Weet u zeker dat u dit item wilt verwijderen? Na deze actie is het artikel niet meer terug te halen");
        if (Delete_item)
        {
        window.location.href = 'cat.asp?action=verwijderen&id='+ id +'&cat=\'<%response.write(response.querystring("cat"))%>\';
        }
    }
</script>


en de verwijder module om de tabellen te laten veranderen:
code:
1
2
3
4
5
6
7
if request.querystring("action") = "verwijderen" then
    vid = request.querystring("id") 
    vcat = request.querystring("cat")

    set RS = server.CreateObject("adodb.recordset")
    RS.Open "DELETE * FROM "& vcat &" WHERE "& productid &" = "& vid &"", Conn 
    end if


en als laatst de link die het javascriptje aanroept:
code:
1
<a href="javascript:ConfirmDel('<%=rs2("PRODUCTID")%>');">[img]"IMAGES\verwijderen.gif"[/img]</a>

en de URL die in de adresbalk staat is voordat je deze code aanroept:
../cat.asp?cat=wc

cat is dan de naam van een tabel, in dit geval de tabel wc


dat is al het nodige denk ik. Wie kan me helpen?

It's me Mario


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13-05 21:26

gorgi_19

Kruimeltjes zijn weer op :9

En wat is nu concreet je probleem? :?

Ow ja, en je moet hier niet over 2 maanden komen dat iemand je complete tabel in 1 keer heeft geleegd :)

[ Voor 63% gewijzigd door gorgi_19 op 24-02-2005 15:17 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
nou het probleem is dat ik deze error krijg:

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error in FROM clause.
cat.asp, line 31

en dan is line 31 gelijk aan lijn 6 van het laatste stukje code

[ Voor 31% gewijzigd door mmniet op 24-02-2005 15:20 ]

It's me Mario


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13-05 21:26

gorgi_19

Kruimeltjes zijn weer op :9

Gebruik eens Response.Write om je SQL Statement op het scherm te krijgen en nogmaals: wees niet verbaasd als iemand je complete database sloopt. Je applicatie lijkt een gruwelijke gatenkaas qua beveiliging.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Met dit script zijn nog veel meer dingen mis. Zoek eens op SQL-Injection en Parameter+Query.

Verder is debuggen natuurlijk ook een kunst. Echo eens de SQL-query die je opbouwt, dan zie je de fout vanzelf wel.

Superhint: &id='+ id +'

Hint 1: DELETE * FROM table WHERE field="zeven"
Hint 2: DELETE * FROM table WHERE field=7

[ Voor 7% gewijzigd door Arnaud op 24-02-2005 15:25 ]


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
code:
1
window.location.href = 'cat.asp?action=verwijderen&id='+ id +'&cat=\'<%response.write(response.querystring("cat"))%>\';


response.querystring? :o

Mischien doe je het bewust maar <%= "bla" %> is kort voor <% response.write("bla") %>

Arnaud er is niks mis met dat stukje, id is een javascript var en aangezien de string begint met ' moet je om die variabele er in te plakken ' + var + 'derest' doen. :o
Dat het niet veilig is, is een ander punt maar 7 vervangen door zeven zorgt alleen dat de delete mislukt.

[ Voor 124% gewijzigd door Gert op 24-02-2005 15:31 ]


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:13

Standeman

Prutser 1e klasse

Het is:
code:
1
delete from

en niet
code:
1
delete * from


Het *rtje dus :B

[ Voor 19% gewijzigd door Standeman op 24-02-2005 15:38 ]

The ships hung in the sky in much the same way that bricks don’t.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

gorgi_19 schreef op donderdag 24 februari 2005 @ 15:16:
En wat is nu concreet je probleem? :?

Ow ja, en je moet hier niet over 2 maanden komen dat iemand je complete tabel in 1 keer heeft geleegd :)
http://zijnsite.tld/cat.a...ysobjects&id=0%20OR%201=1

Mag ik? :9~

Professionele website nodig?


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Arnaud er is niks mis met dat stukje, id is een javascript var en aangezien de string begint met ' moet je om die variabele er in te plakken ' + var + 'derest' doen.
Dat het niet veilig is, is een ander punt maar 7 vervangen door zeven zorgt alleen dat de delete mislukt.
Ik wilde aangeven dat het NA dit stukje code misging, namelijk op het response.querystring-gedeelte. Daarom noem ik het ook een hint. Ik geef gelijk toe dat dit erg onduidelijk was en dat jouw bewoordingen veel duidelijker zijn.

Mijn tweede punt is dat je voor een field van type text ="zeven" moet gebruiken en voor een field van type number =7 moet gebruiken (Let op de quotjes").

Al met al lijkt het alsof de TS voor het eerst iets programmeert en allerlei stukjes gevonden code aan elkaar lijmt zonder dat hij weet wat hij aan het doen is en zonder dat hij weet hoe hij moet debuggen.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Dat is database afhankelijk, access vind het *'tje prima.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Gert schreef op donderdag 24 februari 2005 @ 15:44:
[...]

Dat is database afhankelijk, access vind het *'tje prima.
Het slaat alleen nergens op, omdat je per definitie alle velden van een row wegflikkert als je de row wegflikkert. Daarom is het ook geen ANSI-SQL en moet je het dus niet gebruiken, dat er DB-engines zijn die het slikken zegt nog niet dat het goed is.

Professionele website nodig?


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Standeman schreef op donderdag 24 februari 2005 @ 15:37:
Het is:
code:
1
delete from

en niet
code:
1
delete * from


Het *rtje dus :B
Dit is onzin, ik heb het zojuist getest om het zeker te weten en beide mogelijkheden werken (in ieder geval in Access 2003).

  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
ja, ik ben niet heel erg ervaren, maar weet er wel iets van. Maar helaas niet alles, daarom vraag ik hier om hulp. Ja ik ben een nOOb, maar die mensen moeten het ook leren en ik kon er niet veel nuttigs over vinden in de search.

Wat ik nu heb is:
code:
1
window.location.href = "cat.asp?action=verwijderen&id="+ id +'<%request.querystring("cat")%>' ;


sql heb ik nu als volgt:
code:
1
2
3
4
5
6
7
8
if request.querystring("action") = "verwijderen" then
    vid = request.querystring("id") 
    vcat = request.querystring("cat")
    
    set RS = server.CreateObject("adodb.recordset")
    RS.Open "DELETE * FROM "& vcat &" WHERE PRODUCTID = "& vid &"", Conn 

    end if


als echo krijg ik:
code:
1
DELETE * FROM WHERE PRODUCTID = 2

oftewel hij geeft de variabele van de tabel naam niet mee. Nu aan jullie de vraag wat ik er aan kan doen.

Bedankt.

PS: Gezien het feit dat ik een noob ben, wie weet een goeie site over beveiliging?

It's me Mario


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Doe voortaan liever dit:

Niet:
code:
1
RS.Open "DELETE * FROM "& vcat &" WHERE PRODUCTID = "& vid &"", Conn

Wel:
code:
1
2
3
4
5
Dim myDeleteQuery
myDeleteQuery = "DELETE * FROM " & vcat & " WHERE PRODUCTID = " & vid
'Enable for debugging reasons:
'Response.Write myDeleteQuery
RS.Open myDeleteQuery, Conn

  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
Arnaud schreef op donderdag 24 februari 2005 @ 15:56:
Doe voortaan liever dit:

Niet:
code:
1
RS.Open "DELETE * FROM "& vcat &" WHERE PRODUCTID = "& vid &"", Conn

Wel:
code:
1
2
3
4
5
Dim myDeleteQuery
myDeleteQuery = "DELETE * FROM " & vcat & " WHERE PRODUCTID = " & vid
'Enable for debugging reasons:
'Response.Write myDeleteQuery
RS.Open myDeleteQuery, Conn
omdat?

It's me Mario


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Arnaud schreef op donderdag 24 februari 2005 @ 15:48:
[...]


Dit is onzin, ik heb het zojuist getest om het zeker te weten en beide mogelijkheden werken (in ieder geval in Access 2003).
Lees curry684 in "[JS/ASP]Tabel naam meegeven in URL" nog eens ;)
mmniet schreef op donderdag 24 februari 2005 @ 15:50:
PS: Gezien het feit dat ik een noob ben, wie weet een goeie site over beveiliging?
P&W FAQ - Hoe beveilig ik een website? O-)

Lees dan meteen P&W FAQ - SQL even helemaal :)

[ Voor 7% gewijzigd door curry684 op 24-02-2005 16:02 ]

Professionele website nodig?


Verwijderd

er staat nergens in je querystring van je location.href dat er een parameter "cat" is.
of mis ik iets?

edit:

en volgens mij is je hele location.href redirect fout. check eens je broncode als je die pagina bekijkt?!?

[ Voor 42% gewijzigd door Verwijderd op 24-02-2005 16:04 ]


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Standeman schreef op donderdag 24 februari 2005 @ 15:37:
Het is:
code:
1
delete from

en niet
code:
1
delete * from


Het *rtje dus :B
De * is een wildcard, selecteer je alles mee...

Vertaald geeft delete * from naam_tabel where id=x;

Verwijder alles, van naam_tabel waar id gelijk is aan x

;)

Zoals jij het zegt, wil je niks verwijderen uit een tabel, en dat gaat érg lastig kan ik je vertellen ;)

  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
je bedoelt dit?:
code:
1
2
3
4
5
6
7
if request.querystring("action") = "verwijderen" then
    vid = request.querystring("id")    
    vcat = request.querystring("cat")

    set RS = server.CreateObject("adodb.recordset")
    RS.Open "DELETE * FROM "& vcat &" WHERE "& productid &" = "& vid &"", Conn 
    end if

It's me Mario


  • wboevink
  • Registratie: September 2004
  • Laatst online: 20-04 18:20
Wat dacht je van rs.execute ipv rs.open?

Een delete query zal niet snel een recordset opleveren.

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Omdat dit veel makkelijker leesbaar is, veel makkelijker uit te breiden is en veel makkelijker te debuggen is. Je doet toch ook niet
code:
1
2
set RS = server.CreateObject("adodb.recordset")
    RS.Open "DELETE * FROM "& request.querystring("cat") &" WHERE "& productid &" = "& request.querystring("id") &"", Conn


Misschien moet de TS eens Option Explicit bovenaan zijn pagina zetten, controleren of request.querystring("cat") wel een waarde oplevert en ook of het type van productid in de database wel een number is.

[offtopic]Kunnen we ophouden over "DELETE * FROM", dit is misschien interessant voor een eigen topic, maar het heeft niet te maken met het probleem![offtopic]

[ Voor 19% gewijzigd door Arnaud op 24-02-2005 16:12 . Reden: DELETE (*) FROM ]


Verwijderd

code:
1
window.location.href = "cat.asp?action=verwijderen&id="+ id +'<%request.querystring("cat")%>' ;

volgens mij als je met view source naar je asp pagina gaat kijken staat er iets van

code:
1
window.location.href = "cat.asp?action=verwijderen&id="+ id +'tabelnaam' ;

oftewel, je redirect zal opleveren
code:
1
cat.asp?action=verwijderen&id=3tabelnaam

en niet
code:
1
cat.asp?action=verwijderen&id=3&[b]cat=[/b]tabelnaam


Edit:
In je openingspost staat het wel goed!

[ Voor 15% gewijzigd door Verwijderd op 24-02-2005 16:23 ]


  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
opzich was dat wel een hele stomme fout, maar dat is opgelost echter nu geeft ie nog steeds niet correct de tabelnaam mee. Nu is de code:
code:
1
window.location.href = "cat.asp?action=verwijderen&id="+ id +'&cat=<%request.querystring("cat")%>' ;


maar nu is de echo van de query nog steeds:
code:
1
DELETE * FROM WHERE PRODUCTID = 2

de querystring is als volgt:
code:
1
cat.asp?action=verwijderen&id=2&cat=

[ Voor 9% gewijzigd door mmniet op 24-02-2005 16:24 ]

It's me Mario


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dit lijkt mij redelijk basic debug werk. Is daar niet een stuk in de FAQ over? ;)

Heb je al gecontroleerd of de pagina die deze pagina aanroept wel netjes de querystring("cat") vult? Het lijkt erop dat deze leeg is.

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Dus op het moment dat je
code:
1
 window.location.href = "cat.asp?action=verwijderen&id="+ id +'&cat=<%request.querystring("cat")%>' ;
doet doe je voortaan

code:
1
 window.location.href = "cat.asp?action=verwijderen&id="+ id +'&cat=<%=request.querystring("cat")%>' ;

en controleer je of request.querystring("cat") niet leeg is

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-05 22:46

Janoz

Moderator Devschuur®

!litemod

Dus? Ik neem aan dat je daar ook wel je conclusies uit kunt trekken toch?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mmniet
  • Registratie: Oktober 2002
  • Laatst online: 13-05 08:20

mmniet

De beetje weter

Topicstarter
WOEI!!! het is opgelost. Mede dankzij uiteraard.

De code moest nu zijn:
code:
1
window.location.href = "cat.asp?action=verwijderen&id="+ id +'&cat=<%response.write(request.querystring("cat"))%>' ;


uiteraard ben ik er nu achtergekomen dat er een paar nOObish fouten in zaten van mij kant en dat ik het makkelijk in mijn eentje op kon lossen, maar ik ben jullie dankbaar voor jullie hulp. Hopelijk zie ik het voortaan zelf (anders roep ik jullie hulp wel weer in), bedankt in ieder geval

Slotje?

It's me Mario


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-05 22:46

Janoz

Moderator Devschuur®

!litemod

Er komen alleen slotjes op topics die niet volgens de policy zijn. Wanneer een probleem opgelost is wordt er geen slot op gezet.

Daarnaast denk ik dat de problemen nog moeten beginnen. Zie bijvoorbeeld ook een eerdere reactie van curry.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 28-02 22:22
Ik sluit me volledig bij Janoz aan!

Het probleem is niet opgelost, de problemen gaan nu beginnen. De TS is een typisch voorbeeld van een "het compiled, dus het is af"-programmeur. Zodra je dit live zet verwacht ik dat je database binnen de korste keren leeg, verwijderd of corrupt zal zijn. Daarnaast houd ik mijn hart vast voor je volgende projecten.

Programmeren is heel iets anders dan een paar regeltjes code aan elkaar hangen en controleren of die in 1 specifiek geval precies doen wat je verwacht.

Doe alle GOTTERS die je geholpen hebben een plezier. Wij hebben jou uren werk bespaart. Besteed die uren aan het doorlezen van een boek/website over "netjes" programmeren.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Professionele website nodig?


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:13

Standeman

Prutser 1e klasse

Gert schreef op donderdag 24 februari 2005 @ 15:44:
[...]

Dat is database afhankelijk, access vind het *'tje prima.
Komt omdat Access zich niet echt houd aan de SQL conventies.. Elke serieuze DB doet dat namelijk wel (MySQL / Oracle / Postgress), van MSSQL weet ik het eigenlijk niet.

The ships hung in the sky in much the same way that bricks don’t.


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:13

Standeman

Prutser 1e klasse

GJ-tje schreef op donderdag 24 februari 2005 @ 16:04:
[...]
De * is een wildcard, selecteer je alles mee...

Vertaald geeft delete * from naam_tabel where id=x;

Verwijder alles, van naam_tabel waar id gelijk is aan x

;)

Zoals jij het zegt, wil je niks verwijderen uit een tabel, en dat gaat érg lastig kan ik je vertellen ;)
Ja een wildcard voor de colom naam. Delete werkt op record niveau. In jouw ogen ga je dus kolommen verwijderen :? Dat behoort weer toe aan de DDL syntax. Als ik jou was zal ik de SQL specs nog maar 's doorlezen...

The ships hung in the sky in much the same way that bricks don’t.

Pagina: 1