Closed Bug 103454 Opened 23 years ago Closed 2 years ago

Javascript allows site to hide windowmanager window decorations

Categories

(Core :: Widget: Gtk, defect)

x86
Linux
defect
Not set
major

Tracking

()

RESOLVED WORKSFORME
Future

People

(Reporter: cesarb, Unassigned)

References

()

Details

(Keywords: sec-low, Whiteboard: [sg:low spoof])

Attachments

(1 file)

Offshot from bug 69290 as requested by jruderman@hmc.edu

The site maximizes the window and moves it so the titlebar and the window
borders are out of the screen with Enlightenment 0.16.5 (Debian package
0.16.5-4) using the default theme (BrushedMetal-Tigert).

Relevant javascript:

if (top.frames.length != 0)
top.location = self.document.location;
self.moveTo(0,0);
self.resizeTo(screen.availWidth,screen.availHeight);


Comment from original bug:
> cesarb: please should file a bug on the fact that a window can become large 
enough to make the titlebar disappear.  If a site did that and also told 
Mozilla not to display menus and toolbars, a site could create a full-screen 
browser window with no UI.  Some porn sites *already* exploit a similar (but 
intentional) bug in Internet Explorer in order to make it hard for you to close 
their pop-up ads before reading them.  Mozilla's policy is that web pages 
shouldn't be able to make their windows larger than a maximized window without 
chrome privs (see "JavaScript Features Requiring Privileges" on 
http://www.mozilla.org/projects/security/components/signed-scripts.html), and 
from your description it sounds like that isn't working correctly under 
Enlightenment.
Attached file Minimal testcase
Over to XP apps.  It sounds like the problem here is us not getting the right
maximal window size....

ccing blizzard who may know something useful about windowmanagers and the like.  :)
Assignee: mstoltz → pchen
Status: UNCONFIRMED → NEW
Component: Security: CAPS → XP Apps
Ever confirmed: true
QA Contact: bsharma → sairuh
with Sawfish WM the window does not exceed visible screen area when using the
testcase. Screen size is estimated correct.
I see the problem with AfterStep.  Maybe the window manager is just told "make
this the size of the screen" or "make this maximized" and different WMs treat
that differently?
bug confirmed with twm
->jag? bryner?
Assignee: pchen → jaggernaut
This could be a security issue because it makes for better content spoofing.
Upping the severity.
Severity: normal → major
You could actually state the problem even simpler...just do a window.moveTo(0,0)
and you've pushed the titlebar off the screen. The problem is not with
availWidth and availHeight, the problem is that moveTo appears to treat the
bottom edge of the titlebar as the top of the window (Y=0 for the window).
moveTo(0,5) puts the titlebar partially off the screen. We're using the wrong
reference point.
I remember fighting with this awhile back.  blizzard, how is this _supposed_ to
work?
Well, from the standpoint of the MoveTo the corner is the corner of the window,
not the window manager.  At least, that's the way the code works.  Should
MoveTo() include the window manager bar?
Chris,
  That doesn't seem to be true on any other platform. On Mac and Windows, the
corner of the window is at the top edge of the OS-generated titlebar, not the
top of our chrome.

MoveTo() should include the window manager's titlebar in order to prevent moving
the titlebar off the screen.
X sucks?

Seriously, though, this is a hard problem to solve in a global way and it's
highly window manager dependent.  Using the example in this bug my window
manager won't hide the decorations.  Others might, though.

Here's a possible patch that might fix other window managers:

Index: nsWindow.cpp
===================================================================
RCS file: /cvsroot/mozilla/widget/src/gtk/nsWindow.cpp,v
retrieving revision 1.351
diff -u -r1.351 nsWindow.cpp
--- nsWindow.cpp        2001/09/28 20:11:18     1.351
+++ nsWindow.cpp        2001/10/12 19:43:36
@@ -2723,6 +2723,9 @@
       InvalidateWindowPos();
     }
   }
+  else if (mIsToplevel) {
+    gtk_widget_set_uposition(mShell, aX, aY);
+  }
   else if (mSuperWin) {
     gdk_window_move(mSuperWin->shell_window, aX, aY);
   }
I just noticed that
window.open("someurl","name","screenX=0,screenY=0");

does not put the titlebar off the top edge of the screen, but
moveTo(0,0) does. So they're using different points of reference on the window.
Not with my window manager.  Like I said, this is very window manager dependent.
 Have you tried my patch?  Does it help?
I tried the patch above; on my Linux system it does not fix the problem.
Ugh.  I completely screwed that up.  It turns out the code that's right above it
already checks for the mIsToplevel and uses set_uposition.  So the answer is
that you can't get it right if it isn't working now.

What window manager are you using?
Chris, comments in this bug mention twm and AfterStep (which is twm-derived, if
I recall correctly). Chances are this affects fvwm (which is twm-derived) as well.
I'm using Enlightenment (in Redhat 6.1) and I'm seeing the problem.
I don't think this is something we can fix on our end (other than trying to
figure out which windowmanager is running and having some kind of blacklist or
something for the ones we need to clean up after).

I suggest wontfix, but -> danm for another look. Just bounce it back if you
don't want it :-)
Assignee: jaggernaut → danm
Expected behaviour from, like, Windows Navigator 1.0 days, is that
javascript:moveTo(x,y) coordinates are in reference to the top-left, outside
most extreme corner of the OS's window. But as has already been pointed out,
different window managers treat this differently. I have Sawfish and
Enlightenment on my box. One works with us the way you'd hope, the other
doesn't. Sounds like my Window Manager guru Blizzard has already decided this is
simply unfixable. Gonna close this "won't fix" soon unless someone has a clever
idea.
Yeah, this is bad.  Just as an example, Sun's JVM tries to do this so you can
tell what is an applet window and what isn't.  It gets it so wrong it's amazing.
 Sometimes windows are moved offscreen entirely, sometimes they aren't depending
on the window manager.  It's impossible to get right. :(
Clever idea: hidden prefs for the size of the four sides, so a power user can
specify the size of the titlebar and window borders.

Clever idea 2: the blacklisting someone mentioned. It's possible to detect
Enlightenment (it has a plugin API)

Clever idea 3: Find out why is Enlightenment doing that, and fix it in
Enlightenmnet, or maybe add a window hint to tell mozilla the size of the four
sides.

Clever idea 4: Don't allow sites to get "full screen" (if my screen is 1024x768,
there's no way a site can get bigger than that without being at least partially
out of the screen).

Clever idea 5: I'm out of clever ideas for today =)
QA Contact: sairuh → jrgm
See also bug 104303, "script can make a window larger than the screen (Linux)".
Does Mozilla's window-cascading code keep the window manager decorations on the 
screen?  If it does, maybe we could borrow some of that code.

If we can't fix this, we should discuss this problem with window manager makers 
and/or file bugs against the buggier window managers.
Target Milestone: --- → mozilla1.0.1
Just like to point out a workaround for Enlightenment if that affects the
severity. The original post stated that "If a site did that and also told
Mozilla not to display menus and toolbars, a site could create a full-screen
browser window with no UI."  However regardless of what is done to the window,
the UI of Alt-(left-click) to move the window, and Alt-(right-click) to get the
Close/Annihilate/Iconify/Raise/Lower....Window Size->... menu will still exist
and allow the user to sufficently manipulate the window.
Target Milestone: mozilla1.0.1 → mozilla1.1beta
Blocks: useragent
See also bug 130872, "Always create new windows within screen boundaries" (Mac).
Update target milestone to 'Future' since this missed the 'mozilla1.1beta' train.
Target Milestone: mozilla1.1beta → Future
Product: Core → Mozilla Application Suite
Assignee: danm.moz → nobody
This bug report is registered in the SeaMonkey product, but has been without a comment since the inception of the SeaMonkey project. This means that it was logged against the old Mozilla suite and we cannot determine that it's still valid for the current SeaMonkey suite. Because of this, we are setting it to an UNCONFIRMED state.

If you can confirm that this report still applies to current SeaMonkey 2.x nightly builds, please set it back to the NEW state along with a comment on how you reproduced it on what Build ID, or if it's an enhancement request, why it's still worth implementing and in what way.
If you can confirm that the report doesn't apply to current SeaMonkey 2.x nightly builds, please set it to the appropriate RESOLVED state (WORKSFORME, INVALID, WONTFIX, or similar).
If no action happens within the next few months, we move this bug report to an EXPIRED state.

Query tag for this change: mass-UNCONFIRM-20090614
Status: NEW → UNCONFIRMED
Do not close security bugs without testing them.
Status: UNCONFIRMED → NEW
Whiteboard: [sg:low spoof]
1) It WFM (KDE4), and I'd actually see this as a window manager bug, not even a Mozilla one (see comment #19 and comment #20 that even propose to WONTFIX it), but 2) it's surely NOT a SeaMonkey-specific problem so it's misfiled nowadays in any case. I'll throw this at Widget:GTK for now, as it's apparently happening only on Linux.
Component: UI Design → Widget: Gtk
Product: SeaMonkey → Core
QA Contact: jrgmorrison → gtk
It doesn't look this is very easy to exploit this anymore. You can only moveTo() windows that were opened by the page, and these end up in tabs by default. If someone still has this problem they should reopen the bug.
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → WORKSFORME
window.open only opens in a tab if the page doesn't specify a size for the window.
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---

Hey Cesar,
Can you still reproduce this issue or should we close it?

Flags: needinfo?(cesarb)

Redirect a needinfo that is pending on an inactive user to the triage owner.
:stransky, since the bug has high severity, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(cesarb) → needinfo?(stransky)

Should be fixed now.

Status: REOPENED → RESOLVED
Closed: 13 years ago2 years ago
Flags: needinfo?(stransky)
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: