根据目前掌握的知识来看,Url请求中的参数,均可以通过Action的set方法被注入到Action中。
现在的问题是,Action中的一些成员变量不想被注入。
如上传文件时,存放服务器上传的路径是通过struts.xml中的param设定的,
同样,Action中也需要对应这个路径的set方法,如:public void setUploadDir(String uploadDir)
这样做的话,如果访问者通过在请求的Url增加一个uploadDir="e:\"参数,即可以将存放上传文件的路径修改,
从而可能对服务器任意路径上传文件。
由于刚接触Struts2不长时间,想问一下,可以限制通过Action中的set方法的注入吗?
问题补充:
根据目前掌握的知识来看,Url请求中的参数,均可以通过Action的set方法被注入到Action中。
现在的问题是,Action中的一些成员变量不想被注入。
如上传文件时,存放服务器上传的路径是通过struts.xml中的param设定的,
同样,Action中也需要对应这个路径的set方法,如:public void setUploadDir(String uploadDir)
这样做的话,如果访问者通过在请求的Url增加一个uploadDir="e:\"参数,即可以将存放上传文件的路径修改,
从而可能对服务器任意路径上传文件。
由于刚接触Struts2不长时间,想问一下,可以限制通过Action中的set方法的注入吗?
--------------------
象bohemia 样的回答后,struts.xml中的参数就没法注入到action中了啊。
问题补充:
直接根据参数,读取到然后后台设置就可以了吧.
有什么好办法获得这个值吗?
如果是内部获得,private set方法也可以不用要了吧。
关键是好多上传文件的例子都是通过在struts.xml中设置param的value注入到action中,我感觉这个方法挺简单,就是有漏洞,所以才会提出问题。
问题补充:
看来,实在不行,我只能调一下staticParams和params的位置了。
希望还有更好的办法。
问题补充:
Web.xml配置;
Servlet读取;
另外,及时你的路径,也到固定的其他配置文件; 也可以的; 没必要一定要通过Struts.
你的意思,我明白了,就是不使用Struts.xml,而是通过在其他文件中设定,用其他方式取得。也就是传统的做法。
但是,这样的话,感觉还是不如直接注入方便,可惜,存在漏洞。
我目前能想到的方法就是把拦截器的位置换换。
不知道其他人有没有别的好方法。
先感谢您的耐心回答。