How do I turn javascript off PROGRAMATICALLY?

C

Csaba Gabor

I'm not talking javascript hara-kiri here. I've got
a database of web pages or snippets I've created
and I'd like to display them in a table. So on my
server (in PHP) I take all the files, and plunk the
text for each between <TD> tags and return that
page, everyone's happy.

Now some joker (me) comes along and puts the single line

<SCRIPT>alert('Hi mom')</SCRIPT>Dad

as the the entry for one file. Sure enough, when
the client gets the page s/he also gets an alert.
So what I'd like to do is to turn off any "immediate
scripting" that happens due to <SCRIPT> tags
within the <TABLE> element (or even the whole
document).

But wait, it gets worse. Plunk the following in between
TD tags (on my IE 6 or Opera 7.23 anyway) and I still
get the alert:

<html><head><title>hi mom alert test</title></head>
<body onLoad='alert("Hi Mom")'>Dad</body></html>

So I'm looking for something that will Just say, "No"
to Javascript "happening" between certain TD tags.

You know in IE when you click on a .HTM or .HTML
file you get a minimalist preview of it on the left? That's
what I want these containing TDs to be.

Thanks, Csaba Gabor
PS. There's a (post TD) part two to this if we get past
this part one.
 
B

Brian Genisio

Csaba said:
I'm not talking javascript hara-kiri here. I've got
a database of web pages or snippets I've created
and I'd like to display them in a table. So on my
server (in PHP) I take all the files, and plunk the
text for each between <TD> tags and return that
page, everyone's happy.

Now some joker (me) comes along and puts the single line

<SCRIPT>alert('Hi mom')</SCRIPT>Dad

as the the entry for one file. Sure enough, when
the client gets the page s/he also gets an alert.
So what I'd like to do is to turn off any "immediate
scripting" that happens due to <SCRIPT> tags
within the <TABLE> element (or even the whole
document).

But wait, it gets worse. Plunk the following in between
TD tags (on my IE 6 or Opera 7.23 anyway) and I still
get the alert:

<html><head><title>hi mom alert test</title></head>
<body onLoad='alert("Hi Mom")'>Dad</body></html>

So I'm looking for something that will Just say, "No"
to Javascript "happening" between certain TD tags.

You know in IE when you click on a .HTM or .HTML
file you get a minimalist preview of it on the left? That's
what I want these containing TDs to be.

Thanks, Csaba Gabor
PS. There's a (post TD) part two to this if we get past
this part one.

You cannot turn off Javascript for the page, but you can filter the
output on the server. The PHP symantecs is out of the scope of this
group, but what it comes down to is this:

When your PHP code outputs it's data fields, do the following:

1. Replace '<' characters with &lt;
2. Replace '>' characters with &gt;

This will cause the data to show up as text, so the script block will
show up exactly the way it is typed, and not execute in the browser.

Brian
 
R

Richard Cornford

Klaus said:
This type of attack is knowns as cross-site scripting.

It wouldn't only apply to scripting. What happens when someone enters:-

<iframe src="#"></iframe>

? (that potentially gets quite recursive.)
You will need to strip or escape all characters which have special
meaning when generating HTML, see
http://www.cert.org/tech_tips/malicious_code_mitigation.html for
details.

Yes, escaping anything that has meaning in HTML, either as the output
page is built or as the data goes into the database (trading an increase
in required storage space for only having to do the job once for each
item).

Richard.
 
R

Reply Via Newsgroup

Csaba said:
I'm not talking javascript hara-kiri here. I've got
a database of web pages or snippets I've created
and I'd like to display them in a table. So on my
server (in PHP) I take all the files, and plunk the
text for each between <TD> tags and return that
page, everyone's happy.

Now some joker (me) comes along and puts the single line

<SCRIPT>alert('Hi mom')</SCRIPT>Dad

as the the entry for one file. Sure enough, when
the client gets the page s/he also gets an alert.
So what I'd like to do is to turn off any "immediate
scripting" that happens due to <SCRIPT> tags
within the <TABLE> element (or even the whole
document).

But wait, it gets worse. Plunk the following in between
TD tags (on my IE 6 or Opera 7.23 anyway) and I still
get the alert:

<html><head><title>hi mom alert test</title></head>
<body onLoad='alert("Hi Mom")'>Dad</body></html>

So I'm looking for something that will Just say, "No"
to Javascript "happening" between certain TD tags.

You know in IE when you click on a .HTM or .HTML
file you get a minimalist preview of it on the left? That's
what I want these containing TDs to be.

Thanks, Csaba Gabor
PS. There's a (post TD) part two to this if we get past
this part one.

Perhaps htmlentities() in PHP might be of some help.

See http://ca2.php.net/htmlentities
or http://www.php.net/htmlentities
 
D

Dr John Stockton

JRS: In article <[email protected]>, seen in
news:comp.lang.javascript said:
I'm not talking javascript hara-kiri here. I've got
a database of web pages or snippets I've created
and I'd like to display them in a table. So on my
server (in PHP) I take all the files, and plunk the
text for each between <TD> tags and return that
page, everyone's happy.

Now some joker (me) comes along and puts the single line

<SCRIPT>alert('Hi mom')</SCRIPT>Dad


You have problems of an altogether different nature, too.

You are, legally, the publisher of whatever appears on your site; and
you may be held responsible if illegal material appears on it.

After the beginning of next month, at least, you will need to comply
with EU law or risk the consequences.
 
B

Brian Genisio

Dr said:
JRS: In article <[email protected]>, seen in




You have problems of an altogether different nature, too.

You are, legally, the publisher of whatever appears on your site; and
you may be held responsible if illegal material appears on it.

After the beginning of next month, at least, you will need to comply
with EU law or risk the consequences.

What law are you speaking of?
 
K

kaeli

You have problems of an altogether different nature, too.

You are, legally, the publisher of whatever appears on your site; and
you may be held responsible if illegal material appears on it.

After the beginning of next month, at least, you will need to comply
with EU law or risk the consequences.

Would sites in other countries also need to comply with EU law?
How could they possibly hope to ensure such compliance?

--
 
D

Dr John Stockton

JRS: In article <[email protected]>, seen in
news:comp.lang.javascript said:
Would sites in other countries also need to comply with EU law?
How could they possibly hope to ensure such compliance?

The USA appears to believe that it has extraterritorial legal rights;
why should the EU not have otherwise, perhaps even by treaty?

I believe that Web sites based in the USA or under the control of an
American are requited to comply with American law, and so on.

Let us suppose that you, believed to be an American in America, host
such a site; and that it is used by persons unknown for distributing
messages in support of OBL, YA, and other undesirables, or encouraging
and assisting criminal activity within the USA. ISTM likely that the
FBI, the DHS, or some other Federal agency will become Manifestly
Displeased.
 
C

Csaba Gabor

That's why I want to be able to encapsulate what IE is already able
to do. OK, I've come to the conclusion that I can't really do what I had
wanted very safely. I coded up some regular expressions in PHP
to 1) remove SCRIPT tags, and 2) any onXXX attributes (excluding
onClick) (there were too many that might fire to be selective, such as
onReadyStateChange, onResize, onMouseover, blah blah blah),
and 3) src attributes, except for images.

Besides being dog slow, there are still plenty of susceptibilities such
as from CSS attributes set locally applying globally (e.g. if one of
the pages to be inserted with the TD element has <BODY bgColor='pink'>
my page will no longer be pretty in pink (groan)).

Furthermore, one of the contained "pages" (they're snippets, after all)
could start off </TD></TR></TABLE> and really wreak layout havoc.
The point is, I would expect to no longer get a valid page anymore.

So, I'm back to my original version of just displaying the underlying
page's text with overflow control.

Csaba Gabor
 
C

Csaba Gabor

This is way off topic but a very interesting thread.
First off, just to clarify a bit, the table for showing
these encapsulated web pages/snippets is only
meant for me so I don't run into your issues, but
acutally I am curious if you could mention some
specifics about this law or provide a link.

The EU has already passed laws governing the
action of non EU citizens abroad. As I understand
it, if you sell something to an EU citizen, the EU wants
you to collect VAT on its behalf and send it in, right?

Meanwhile, the US had a well publicized case
in the last few years. Remember Dimitri Skylarof?
He's the Russian guy who worked for a company
and legally (in Russia) cracked an Adobe encryption
scheme for his employer, Elcomsoft, a Russian
company (should go to trial later this year).
US grants him a visa and when he arrives to
Vegas, WHAM, Adobe sics the feds on him
for breaking the DMCA, which is a US law that
says you shall not divulge anything about electronic
security flaws no matter how bad they are. Really,
I have to wonder if web programmers fighting against
all the browser bugs there are are violating this law
en masse, for many bugs could be construed as a
form of protection. Sound too farfetched?...

Finally, consider the recent situation that arose in
Hungary. Turns out, doctors in Hungary don't have
the same salary as their western counterparts.
Surprise! So they collect tips. Up front. It's called
gratitude money ("hála pénz"). This is nothing new, it's
been done for years and years. Somebody set up a
website to collect information on how much various
doctors were charging. When the press got ahold of
this there was a huge stink. The government wasn't
happy because it made them look cheap PLUS they
figured out they weren't getting taxes on that money.
The doctors weren't happy cause it made them seem
dirty (the people weren't getting the services that the
government was telling them they were entitled to).
The citizens were not happy because they could either
pay an extra month's worth of wages or wonder whether
the doctor would see them. Of course the news didn't
make any difference to them because everybody already
knew about the situation anyway.

But then a government minister figured that the privacy
of them there doctors was being violated. Can you
imagine? They are flagrantly demanding money from
people (the public) who have already paid to use their
services, and then saying that compiling this information
violates their privacy? I was surprised to hear that
the guy very nicely took his web page down. A month
later I was astounded to hear that the guy was getting sued.
Wait a sec, hadn't he taken his site down right away?
Well, yes, but some guy in America copied the data
and then reposted it when the original site went down.
They evidently couldn't sue the guy in America so they're
going after this guy, I suppose on the grounds that if he
hadn't put up his web site, the guy in America wouldn't
have been able to copy it. I have no idea of the disposition
of this case, but I am curious.

Hoping you don't run afoul of another country's
unknown law that applies to you,
Csaba Gabor
 
G

Grant Wagner

Richard said:
It wouldn't only apply to scripting. What happens when someone enters:-

<iframe src="#"></iframe>

? (that potentially gets quite recursive.)


Yes, escaping anything that has meaning in HTML, either as the output
page is built or as the data goes into the database (trading an increase
in required storage space for only having to do the job once for each
item).

Richard.

You really don't need to escape "everything" that has meaning. Simply
replace any "<" characters with "&lt;" during output.

Any HTML entered by an end-user will simply appear in the output as HTML,
but will not be parsed by the browser.

--
| Grant Wagner <[email protected]>

* Client-side Javascript and Netscape 4 DOM Reference available at:
*
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/frames.html

* Internet Explorer DOM Reference available at:
*
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp

* Netscape 6/7 DOM Reference available at:
* http://www.mozilla.org/docs/dom/domref/
* Tips for upgrading JavaScript for Netscape 7 / Mozilla
* http://www.mozilla.org/docs/web-developer/upgrade_2.html
 
C

Csaba Gabor

Grant Wagner said:
You really don't need to escape "everything" that has meaning. Simply
replace any "<" characters with "&lt;" during output.

Any HTML entered by an end-user will simply appear in the output as HTML,
but will not be parsed by the browser.

Yes, that is what I reverted back to doing, only I should first replace "&"
characters
with "&amp;" and then replace "<" character with "&lt;"
 
C

Csaba Gabor

You know, I've had another think about Richard's iframe line, and
I'm thinking that it might just be the ticket. When I get around to it,
I'll offer a choice to show selected columns as "protected" iframes.
I'll still rip out <SCRIPT> and do the other things that I already
mentioned to prevent the top level window/user from being aversely
affected, and then plunk whatever's left into an Iframe which I'll
stuff into the TD. There, now my top level window shouldn't
have to worry about attributes of elements with the iframes, right?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top