From kfm-devel Tue Jul 08 12:46:23 2003 From: Waldo Bastian Date: Tue, 08 Jul 2003 12:46:23 +0000 To: kfm-devel Subject: Re: Fwd: [Bug 22558] referrer leaks through to non-referring site X-MARC-Message: https://marc.info/?l=kfm-devel&m=105766844209941 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--Boundary-00=_f0rC/h5WkvmZWjH" --Boundary-00=_f0rC/h5WkvmZWjH Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Monday 07 July 2003 15:52, Waldo Bastian wrote: > On Sunday 06 July 2003 18:03, Waldo Bastian wrote: > > On Saturday 05 July 2003 22:39, George Staikos wrote: > > > Now the question is, did my changes expose this? > > > > With my build from the 3.1 branch (without your partial fix for 60479) I > > notice the problem when entering the URL in the location bar and when > > pasting the URL with MMB. I can't reproduce it by selecting the url as > > bookmark. > > > > The bad part is that the referrer here includes username and password as > > well, so I guess the khtml fix is needed after all. > > Attached are two patches as a partial fix to the referrer problem. It > changes the way how d->m_pageReferrer is set within KHTMLPart: It is now > set according to the information that it gets back from the io-slave (http > slave). This ensures that the document.referrer is better synced to the > actual referrer send by the http-slave. It also makes it possible to have > all referrer logic in kio_http instead of having it to duplicate in > multiple places. > > Also attached is a test-case. They should be installed on a php-enabled > webserver and accessed via http. The following tests should be done with > the test-case: > > (1) Browse from referrer.php to referrer2.php to referrer3.php via the > links on the pages. > - The referrer should point to the previous page in each instance. > > (2) Use the back button to go back. > - The referrers should not have changed, both referrers on referrer2.php > should still point to referrer.php. > > (3) Reload the page. > - The referrers should not change, both referrers on referrer2.php should > still point to referrer.php. > > (4) Browse to referrer3.php via the link on the referrer2.php page. Then > visit 15 other pages (To flush the page-cache for referrer2.php) and clear > the cache. Now go back to referrer2.php using the history. > - The referrers should not change, both referrers on referrer2.php should > still point to referrer.php. > > (5) Go to referrer3.php and then enter referrer2.php in the location bar. > - Both referrers should be empty. > > (6) Go to referrer.php and browse to referrer2.php. Now enter referrer2.p= hp > in the location bar. > - Both referrers should be empty. > > (7) Go to referrer.php and browse to referrer2.php. Now enter > referrer2.php#bla in the location bar. > - Both referrers should not change, both referrers on referrer2.php should > still point to referrer.php. > > (8) Go to referrer.php and browse to referrer2.php. Now click on > "Javascript reload". > - Both referrers should not change, both referrers on referrer2.php should > still point to referrer.php. > > (9) Go to referrer.php and browse to referrer2.php and bookmark it. Go to > referrer3.php and then go to referrer2.php using the bookmark. > - Both referrers should be empty. > > (10) While still on referrer2.php select the referrer2.php bookmark again. > - Both referrers should be empty. > > (11) Go to referrer2.php and select "Redirection to referrer3.php". You > should end up on referrer3.php. > - Both referrers should point to referrer2.php > > (12) Go to http://foo:bar@//referrer.php (Fill in and > accordingly) and browse to referrer2.php > - Neither referrer should contain either foo or bar. > > With the patches below applied, Konqueror still fails on test (3) and (8). > After applying the patches and installing make sure that your konqueror is > actually using the new khtml and the new kio_http. You may need to kill a= ny > existing kio_http process first and you may wish to flush the kio_http > cache with "kio_http_cache_cleaner --clear-all". > > I have tested Netscape 4.x which breaks on (12) > > Open issues: > A) What should the behavior be when accessing the files via file:/ instead > of http? NS 4.x sets document.referrer in that case. (Note that Konqueror > doesn't the file at all unless renamed it to .html) Konqueror leaves > document.referrer empty. > B) What should the behavior be when accessing a file via http:// but link= ed > from a file:/ URL? NS 4.x sets document.referrer to the file:/ url in that > case. Konqueror leaves document.referrer empty. > > I would appreciate it if people could verify the behavior of other browse= rs > wrt 1-12 and A & B. > > Additional test-cases are welcome. > > Cheers, > Waldo The attached konqueror patch takes care of (3) but (8) is still broken. I=20 would appreciate it if someone could verify the above tests with other=20 browsers so that we know that we pursue the correct semantics. Cheers, Waldo =2D --=20 bastian@kde.org -=3D|[ SuSE, The Linux Desktop Experts ]|=3D- bastian@suse.= com =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE/Cr0fN4pvrENfboIRAtFMAJ4qo5HB3Ep/jWQPrtDOmbvgKaSOdQCdHqvv wr+pndZohtAAcXZdAt5hMQE=3D =3DdC2o =2D----END PGP SIGNATURE----- --Boundary-00=_f0rC/h5WkvmZWjH Content-Type: text/x-diff; charset="iso-8859-1"; name="HEAD-kdebase-konqueror.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="HEAD-kdebase-konqueror.patch" Index: konq_mainwindow.cc =================================================================== RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.cc,v retrieving revision 1.1198 diff -u -r1.1198 konq_mainwindow.cc --- konq_mainwindow.cc 7 Jul 2003 13:18:43 -0000 1.1198 +++ konq_mainwindow.cc 8 Jul 2003 12:38:26 -0000 @@ -562,7 +562,7 @@ else // no known serviceType, use KonqRun { kdDebug(1202) << "Creating new konqrun for " << url.url() << " req.typedURL=" << req.typedURL << endl; - if (currentURL().startsWith("http")) { + if (currentURL().startsWith("http") && !req.args.metaData().contains("referrer")) { KURL tmp = currentURL(); tmp.setRef(QString::null); tmp.setUser(QString::null); @@ -610,7 +610,7 @@ kdDebug(1202) << "req.openAfterCurrentPage= " << req.openAfterCurrentPage << endl; bool bOthersFollowed = false; - if (currentURL().startsWith("http")) { + if (currentURL().startsWith("http") && !req.args.metaData().contains("referrer")) { KURL tmp = currentURL(); tmp.setRef(QString::null); tmp.setUser(QString::null); Index: konq_view.cc =================================================================== RCS file: /home/kde/kdebase/konqueror/konq_view.cc,v retrieving revision 1.335 diff -u -r1.335 konq_view.cc --- konq_view.cc 7 Jul 2003 15:50:05 -0000 1.335 +++ konq_view.cc 8 Jul 2003 12:38:26 -0000 @@ -191,6 +191,8 @@ m_doPost = args.doPost(); m_postContentType = args.contentType(); m_postData = args.postData; + // Save the referrer + m_pageReferrer = args.metaData()["referrer"]; } m_bAborted = false; @@ -687,6 +689,7 @@ current->doPost = m_doPost; current->postData = m_doPost ? m_postData : QByteArray(); current->postContentType = m_doPost ? m_postContentType : QString::null; + current->pageReferrer = m_pageReferrer; } void KonqView::goHistory( int steps ) @@ -763,6 +766,7 @@ m_doPost = h.doPost; m_postContentType = h.postContentType; m_postData = h.postData; + m_pageReferrer = h.pageReferrer; } else m_pPart->openURL( h.url ); @@ -1192,6 +1196,10 @@ else return false; } + // Re-set referrer + args.metaData()["referrer"] = m_pageReferrer; +qWarning("### KonqView::prepareReload referrer = %s", m_pageReferrer.latin1()); + return true; } Index: konq_view.h =================================================================== RCS file: /home/kde/kdebase/konqueror/konq_view.h,v retrieving revision 1.162 diff -u -r1.162 konq_view.h --- konq_view.h 26 Jun 2003 22:40:36 -0000 1.162 +++ konq_view.h 8 Jul 2003 12:38:26 -0000 @@ -55,6 +55,7 @@ QByteArray postData; QString postContentType; bool doPost; + QString pageReferrer; }; /* This class represents a child of the main view. The main view maintains @@ -393,6 +394,11 @@ QByteArray m_postData; QString m_postContentType; bool m_doPost; + + /** + * The referrer that was used to obtain this page. + */ + QString m_pageReferrer; KonqMainWindow *m_pMainWindow; KonqRun *m_pRun; --Boundary-00=_f0rC/h5WkvmZWjH--