Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

Textarea beveiligen met javascript

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi iedereen, ik ben bezig om een functie te maken die ervoor zorgt dat een <textarea> wordt ingevuld zoals ik het het wil.

Ik heb hiervoor volgende code geschreven:

HTML:
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
<html>
<head>
<script type="text/javascript">
function textCounter(event){
  var field = document.reactieform.reactie
  var counter = document.getElementById('aantalkarakters');
  var info = document.getElementById('info');
  var maxlimit = 460;
  var code = (document.all) ? event.keyCode:event.which;
  var ctrl = (document.all) ? event.ctrlKey:event.modifiers & Event.CONTROL_MASK;

  if (ctrl && code==86) //CTRL+V
  {
    info.innerHTML = "hier";
    window.event.returnValue = false;
  }
  if(field.value.length >= maxlimit){
    field.value = field.value.substring(0, maxlimit);
    counter.innerHTML = 0;
  }else{
    if ((field.value.length) % 115 == 0){
      if(field.value.length > 1){
        field.value = field.value + "\n";
      }
    }
    counter.innerHTML = maxlimit - field.value.length;
    }
}
</script>
</head>
<body oncontextmenu="return false;">
<form name="reactieform" method="post"><table class="nieuws">
<textarea name="reactie" onkeydown="textCounter(event)" onkeyup="textCounter(event)" onblur="textCounter(event)" cols="115" rows="3" class="textfield_large"></textarea><br>
<span id="aantalkarakters">460</span> tekens resterend<br>
<span id="info"></span>
</form>
</body>
</html>


Mijn code controleert een aantal zaken:
1. De maximale lengte per ingegeven regel wordt gecontroleerd = OK
2. De maximale totaalinput wordt gecontroleerd = OK
3. De maximale input kan omzeild worden door copy/paste:
-rechtsklik met muis om te pasten gedisabled = OK
-ctrl+v disablen om te pasten = OK in IE, niet in FireFox.

Bij het allerlaatste puntje zit dus mijn probleem, nu heb ik hier al heel wat zitten prullen met het resultaat dat het altijd ergens fout gaat of mijn code veel te omslachtig wordt, hebben jullie geen idee hoe ik het kan oplossen?
Het lijkt erop dat Firefox geen rekening kan houden dat er twee toetsen tegelijk zijn ingedrukt terwijl IE hier geen moeite mee heeft.

[ Voor 20% gewijzigd door BtM909 op 23-10-2008 14:03 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Gebruik even code-tags in plaats van zo'n tabel aub?

En wat heb je zelf gezocht? En waarom evalueer je niet gewoon bij elke onchange de inhoud van je textarea?

Verder is dit leuk om in JS te doen, maar zet JavaScript uit of gebruik een toolbar die html kan bewerken en je hebt deze 'beveiliging' omzeild. Ik hoop dat je de invoer serverside nogmaals controleert?

[ Voor 30% gewijzigd door CodeCaster op 23-10-2008 13:54 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Eris
  • Registratie: December 2003
  • Laatst online: 17:20

Eris

-

En hoe wil je het bij een apple controleren?

Nee het beste wat je kan doen is bij er een onchange event er aan hangen en dat dan te controleren aan de maximale aantal keys

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

https://developer.mozilla.org/en/DOM/event.ctrlKey

Code kun je trouwens tussen [ code ] tags zetten.

TabCinema : NiftySplit


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-11 11:40

Janoz

Moderator Devschuur®

!litemod

Handiger is om je code even tussen [code] tags te zetten. Daarvan wordt het een stuk leesbaarder.

Over je probleem: Onmogelijk. Op dit moment kan ik je beveiliging ook nog omzeilen door op de knop rechts naast de windowstoets te drukken. Mocht je daar ooit een oplossing voor vinden dan zet ik gewoon het javascript uit en werkt het ook. Wil je me verplichten dat ik het javascript aan heb staan dan schrijf ik een klein stukje code in greasemonkey waarmee ik je javascript precies aanpas zodat ik het alsnog kan doen.

Tot slot kan ik natuurlijk ook nog gewoon zelf een request in elkaar sleutelen en op die manier alsnog precies die verandering doorvoeren die jij wilt verbieden.


Javascript moet je alleen gebruiken om de handigheid van je pagina te verhogen. Je moet je beveiliging er niet van afhankelijk maken.

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


  • ZpAz
  • Registratie: September 2005
  • Laatst online: 23:55
Ik zou zoals Janoz al aangeeft, puur controleren op het maximale aantal karakters bij een onchange event, mocht dat hoger zijn dan xx, geef dan een melding, of kort het af tot xx.

Daarna altijd serverside controleren, aangezien je makkelijk javascript kan uitzetten, om zo deze 'beveiliging' te omzeilen.

Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:42

Sebazzz

3dp

En dan ook waarom:
HTML:
1
oncontextmenu="return false;"
Ten eerste is het irritant, want wil je ermee bereiken, dat ze je HTML bron niet kunnen zien? En ten tweede negeren Opera en Firefox dit vrolijk.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

Topicstarter
Sebazzz schreef op donderdag 23 oktober 2008 @ 14:10:
En dan ook waarom:
HTML:
1
oncontextmenu="return false;"
Ten eerste is het irritant, want wil je ermee bereiken, dat ze je HTML bron niet kunnen zien? En ten tweede negeren Opera en Firefox dit vrolijk.
Dat is om niet te kunnen rechtsklikken in mijn textarea zodat ze niet voor "paste" kunnen kiezen.

Wat ik met de javascript wil bereiken is om het de user al duidelijk te maken hoe hij een ingave moet doen, voordat de data in de database wordt opgeslagen wordt deze nogmaals gecontroleerd op input.

Er is echter wel nog één functionele reden waarom ik dit wil gebruiken en dat is dat als een gebruiker bijvoorbeeld een zin in mijn textarea ingeeft die enorm lang is, dit ook zo wordt getoond op de site en de site dan enorm wordt verbreed (toegevoegde reacties worden in een tabel getoond).
Vandaar dat ik in mijn javascriptfunctie controleer en een "\n" zet aan het einde van de textbox bij elke regel.
Natuurlijk omzeil je dit met copy/paste.

Zal ik dit dan met php moeten splitten ofzo? Of hoe wordt zoiets gedaan? Heb daar eigenlijk totaal geen ervaring mee en tis eerste maal dat ik aan een grotere/deftige site bezig ben.

Alvast bedankt voor jullie reacties :)


(Sorry van de code tags, zal eraan denken in vervolg, maar kon mn post niet meer aanpassen.)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-11 11:40

Janoz

Moderator Devschuur®

!litemod

Je hebt dus enkel het probleem dat je tekst te lang wordt en bent daarom van dergelijke draconische maatregelen aan het nemen?

Flikker nu al die javascript meuk overboord. Eventueel kun je een waarschuwing geven wanneer de tekst te lang wordt, of de tekst afkappen, maar doe dat gewoon op het onchange event. Die wordt ook aangeroepen wanner iemand loopt te pasten. Er zijn 1001 nuttige situaties van plakken, en enkel om die negatieve ga je het helemaal verbieden?

Het opknippen is sowieso iets dat je compleet serverside moet gaan doen. Daarnaast treed dat probleem als het goed is enkel op wanneer er overdreven lange woorden gebruikt worden. De rest wordt neem ik aan automatisch afgebroken.

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


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

Dat je site overweg kan met brede user-generated content is ook voor een groot deel goed webdesign & -development.

Ik noem maar wat: overflow-x: hidden :P

Verwijderd

Topicstarter
Ok heb het reeds simpel opgelost, aangezien het grootste probleem dus idd was als iemand een gigantisch lange zin zonder spaties ingaf dat dit in een tekstbox niet werd opgesplitst controleer ik nu gewoon op lengtes van woorden. Als je aparte woorden ingeeft worden die idd altijd gesplitst.

Die overflow-x is idd handig, maar in mijn geval is het de bedoeling dat je kan ingeven zoveel als de grootte van de textarea, dus scrollen enzo zou niet nodig mogen zijn.

Bedankt voor de goede reacties in ieder geval, heel nuttig allemaal :)
Pagina: 1