@@ -856,4 +856,56 @@ component extends="coldbox.system.testing.BaseModelTest" {
856856 expect ( event .getSesBaseUrl () ).toInclude ( event .getSESBasePath () );
857857 }
858858
859+ /**
860+ * Tests for method spoofing security fix (COLDBOX-1406).
861+ * _method override should only be honored when the original request is POST.
862+ */
863+ function testGetHTTPMethodNoOverrideOnGET (){
864+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " GET" );
865+ event .setValue ( " _method" , " DELETE" );
866+ expect ( event .getHTTPMethod () ).toBe ( " GET" );
867+ }
868+
869+ function testGetHTTPMethodNoOverrideOnHEAD (){
870+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " HEAD" );
871+ event .setValue ( " _method" , " DELETE" );
872+ expect ( event .getHTTPMethod () ).toBe ( " HEAD" );
873+ }
874+
875+ function testGetHTTPMethodNoOverrideOnPUT (){
876+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " PUT" );
877+ event .setValue ( " _method" , " DELETE" );
878+ expect ( event .getHTTPMethod () ).toBe ( " PUT" );
879+ }
880+
881+ function testGetHTTPMethodPostDeleteOverride (){
882+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " POST" );
883+ event .setValue ( " _method" , " DELETE" );
884+ expect ( event .getHTTPMethod () ).toBe ( " DELETE" );
885+ }
886+
887+ function testGetHTTPMethodPostPutOverride (){
888+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " POST" );
889+ event .setValue ( " _method" , " PUT" );
890+ expect ( event .getHTTPMethod () ).toBe ( " PUT" );
891+ }
892+
893+ function testGetHTTPMethodPostPatchOverride (){
894+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " POST" );
895+ event .setValue ( " _method" , " PATCH" );
896+ expect ( event .getHTTPMethod () ).toBe ( " PATCH" );
897+ }
898+
899+ function testGetHTTPMethodPostWithNoOverride (){
900+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " POST" );
901+ expect ( event .getHTTPMethod () ).toBe ( " POST" );
902+ }
903+
904+ function testGetHTTPMethodPostGetOverrideIgnored (){
905+ // POST _method=GET should not be honored; result stays POST
906+ var event = getRequestContext ().$( " getOriginalHTTPMethod" , " POST" );
907+ event .setValue ( " _method" , " GET" );
908+ expect ( event .getHTTPMethod () ).toBe ( " POST" );
909+ }
910+
859911}
0 commit comments