diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index b6f464bfd29737f85510f4ee0434ad86dda3cdfe..ab56b1a0323a4031f178f154fa70d7faecec6b65 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1123,6 +1123,14 @@
 				return false;
 			}
 
+			// Firewall Blocked request?
+			if (result.status === 403) {
+				// Go home
+				this.changeDirectory('/');
+				OC.Notification.show(t('files', 'This operation is forbidden'));
+				return false;
+			}
+
 			if (result.status === 404) {
 				// go back home
 				this.changeDirectory('/');
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index aa44c92792d1e8f26c8161074d800f1ee055f7d2..6bcef8b6f4f8a48fdfb61f707cc0afa3ffa9cc81 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -1279,6 +1279,17 @@ describe('OCA.Files.FileList tests', function() {
 			fakeServer.respond();
 			expect(fileList.getCurrentDirectory()).toEqual('/');
 		});
+		it('switches to root dir when current directory is forbidden', function() {
+			fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
+				403, {
+					"Content-Type": "application/json"
+				},
+				''
+			]);
+			fileList.changeDirectory('/unexist');
+			fakeServer.respond();
+			expect(fileList.getCurrentDirectory()).toEqual('/');
+		});
 		it('shows mask before loading file list then hides it at the end', function() {
 			var showMaskStub = sinon.stub(fileList, 'showMask');
 			var hideMaskStub = sinon.stub(fileList, 'hideMask');