Struts2学习笔记(十六) 文件上传(File Upload)

SSRF漏洞利用:从file_get_contents到内网渗透的实战解析 服务端请求伪造(SSRF)是一种常见的安全漏洞,其核心原理在于攻击者能够操控服务器向任意地址发起网络请求。由于请求源自受信任的服务器内部,攻击者可以借此绕过客户端防火墙,访问或探测内部网络资源。这种漏洞的技术价值在于,它可以将一个看似功能单一的应用点,转变为对内网进行信息搜集和横向移动的跳板。在Web安全实践中,SSRF常出现在诸如URL预览、数据采集或内部服务调用等功能中。当开发者使用类似PHP的`file_get_contents`函数处理用户可控的URL输入,且未对协议、目标地址进行严格校验时,便可能 阅读详情

使用jsp/Servlet实现文件上传

在我们的web应用中,文件上传是一项非常常见的功能。以前我学习php的时候也用php写过文件上传,不过php中实现起来比较方便,只需要从全局变量$_FILES中获取到上传文件的临时存放路径等信息,再把它拷贝到目标地址并重命名就可以了。在Java中要实现文件上传要稍微复杂一点。我们需要通过request的getInputStream方法来获取到相关的输入流,然后在从输入流中读取文件内容,悲剧的就是在输入流中加入了一些信息,比如文件名之类的。所以我们要想从输入流中获取到纯正的文件内容,还需要我们做一些处理。

比如我们有一个文本文件,里面只有一句话:hello word,那么如果我们在文件上传时直接将输入流中的数据写入到文件中,那么会多出许多额外的信息。

------WebKitFormBoundaryEvAVDYPz4OMMZU92

Content-Disposition:form-data; name="file"; filename="新建文本文档.txt"

Content-Type: text/plain

 

hello world

------WebKitFormBoundaryEvAVDYPz4OMMZU92—

这些信息有些对我们有用,比如我们可以通过第二行来获取到上传文件的名字,第三行可以获取到文件的类型。但是实际文件的内容应该只有hello world一行,也就是说前面的5行和后面的一行都是多余的,不应该写进文件。下面我们就对这些“多余”的信息做一些处理。

首先我们新建一个Servlet来处理文件内容:

public class AcceptServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 获取输入流
		ServletInputStream in = request.getInputStream();

		// 缓冲字节数组
		byte[] b = new byte[1024];
		// 读取第一个行信息(包含分隔符)
		int len = in.readLine(b, 0, b.length);
		String f = new String(b, 0, len);

		len = in.readLine(b, 0, b.length);
		// 从第二行中提取文件名
		String fileName = new String(b, 0, len);

		fileName = fileName.substring(0, fileName.lastIndexOf("\""));
		fileName = fileName.substring(fileName.lastIndexOf("\"") + 1);
		// 提取文件后缀
		String suffix = fileName.substring(fileName.lastIndexOf("."));

		// 剔除两行无用信息
		in.readLine(b, 0, b.length);
		in.readLine(b, 0, b.length);

		// 创建文件输出流
		FileOutputStream out = new FileOutputStream("d:/"
				+ System.currentTimeMillis() + suffix);

		// 读取数据
		while ((len = (in.readLine(b, 0, b.length))) != -1) {
			String f1 = new String(b, 0, len);
			// 如果已经到达结尾,则不写入(最后一行包含分隔符)
			if (f1.contains(f.trim())) {
				break;
			}
			out.write(b, 0, len);
		}

		out.close();
		in.close();

		PrintWriter p = response.getWriter();
		p.print("success");

	}

}

然后我们新建一个input.jsp

<body>

    <form action="AcceptServlet"method="post" enctype="multipart/form-data">

       <input type="file" name="file">

       <input type="submit"value="submit">

    </form>

  </body>

我们在浏览器中测试一下:

提交之后,页面显示”success”,我们到d盘下打开文件,查看文件内容:

多次测试,每次选择不同的文件类型,比如图片,压缩文件,exe程序。均能正确上传。

使用Struts2实现文件上传

虽然我们在上面的例子中通过一些简单的处理,能够实现文件的上传,但是这有局限性。比如可能在Linux系统中或者不同的浏览器中,输入流中的附加信息的格式会有所不同。那么Struts2提供的文件上传功能将更加具有通用性和易用性,我们无需关注底层是何种实现,Struts2会给我一个统一的结果。

Struts2中的文件上传功能是通过将Commons FileUpload开源库集成进来实现的,这个工作有defaultStack拦截器栈中的fileUpload拦截器来完成。我们查看文档可以知道该拦截器的实现类是org.apache.struts2.interceptor. FileUploadInterceptor.我们查看该拦截器的intercept方法的源码:

public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext ac = invocation.getInvocationContext();

        HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);

        if (!(request instanceof MultiPartRequestWrapper)) {
            if (LOG.isDebugEnabled()) {
                ActionProxy proxy = invocation.getProxy();
                LOG.debug(getTextMessage("struts.messages.bypass.request", new Object[]{proxy.getNamespace(), proxy.getActionName()}, ac.getLocale()));
            }

            return invocation.invoke();
        }

        ValidationAware validation = null;

        Object action = invocation.getAction();

        if (action instanceof ValidationAware) {
            validation = (ValidationAware) action;
        }

        MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;

        if (multiWrapper.hasErrors()) {
            for (String error : multiWrapper.getErrors()) {
                if (validation != null) {
                    validation.addActionError(error);
                }

                if (LOG.isWarnEnabled()) {
                    LOG.warn(error);
                }
            }
        }

        // bind allowed Files
        Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
        while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
            // get the value of this input tag
            String inputName = (String) fileParameterNames.nextElement();

            // get the content type
            String[] contentType = multiWrapper.getContentTypes(inputName);

            if (isNonEmpty(contentType)) {
                // get the name of the file from the input tag
                String[] fileName = multiWrapper.getFileNames(inputName);

                if (isNonEmpty(fileName)) {
                    // get a File object for the uploaded File
                    File[] files = multiWrapper.getFiles(inputName);
                    if (files != null && files.length > 0) {
                        List<File> acceptedFiles = new ArrayList<File>(files.length);
                        List<String> acceptedContentTypes = new ArrayList<String>(files.length);
                        List<String> acceptedFileNames = new ArrayList<String>(files.length);
                        String contentTypeName = inputName + "ContentType";
                        String fileNameName = inputName + "FileName";

                        for (int index = 0; index < files.length; index++) {
                            if (acceptFile(action, files[index], fileName[index], contentType[index], inputName, validation, ac.getLocale())) {
                                acceptedFiles.add(files[index]);
                                acceptedContentTypes.add(contentType[index]);
                                acceptedFileNames.add(fileName[index]);
                            }
                        }

                        if (!acceptedFiles.isEmpty()) {
                            Map<String, Object> params = ac.getParameters();

                            params.put(inputName, acceptedFiles.toArray(new File[acceptedFiles.size()]));
                            params.put(contentTypeName, acceptedContentTypes.toArray(new String[acceptedContentTypes.size()]));
                            params.put(fileNameName, acceptedFileNames.toArray(new String[acceptedFileNames.size()]));
                        }
                    }
                } else {
                    if (LOG.isWarnEnabled()) {
                	LOG.warn(getTextMessage(action, "struts.messages.invalid.file", new Object[]{inputName}, ac.getLocale()));
                    }
                }
            } else {
                if (LOG.isWarnEnabled()) {
                    LOG.warn(getTextMessage(action, "struts.messages.invalid.content.type", new Object[]{inputName}, ac.getLocale()));
                }
            }
        }

        // invoke action
        return invocation.invoke();
    }

从中我们大致可以看出,它首先会判断请求中是否包含文件上传,如果包含,那么就将这些要上传的文件转化为对应的File对象,并且将这些文件对应的ContentType和FileName一并提取出来。它将这些对象设置到了请求参数中,由于fileUpload拦截器在parameters拦截器之前,因此它添加到请求中的这些参数将会被parameters拦截器设置到相应的Action类属性上。从源代码中我们也可以看出,对于文件上传,Action中的一些属性的命名是被写死了。比如ContentType,那么Action类中对应的属性名必须是表单中file表单的name属性值加上“ContentType”。文件名也是表单name属性值加上”FileName”。

从源代码中我们也可以看出最后放入到请求参数中的都是数组类型,也就是Struts2也支持多文件的上传。那么对应的多文件上传时我们Action类中属性也需要设置为数组类型。Struts2能够自动将这些属性给我吗设置上。这个拦截器还有三个属性,通过设置这些属性的值,可以给我吗简化一些操作:

(1)   maximumSize :上传文件的最大长度(字节为单位),默认2mb.

(2)   allowedTypes :允许上传的文件内容的类型,个类型之间使用逗号隔开

(3)   allowedExtensions  :允许上传的文件的后缀列表,多个用逗号隔开

单文件上传实例:

public class UploadAction extends ActionSupport {
	
	private File attachment;
	private String attachmentContentType;
	private String attachmentFileName;

	public File getAttachment() {
		return attachment;
	}

	public void setAttachment(File attachment) {
		this.attachment = attachment;
	}

	public String getAttachmentContentType() {
		return attachmentContentType;
	}

	public void setAttachmentContentType(String attachmentContentType) {
		this.attachmentContentType = attachmentContentType;
	}

	public String getAttachmentFileName() {
		return attachmentFileName;
	}

	public void setAttachmentFileName(String attackmentFileName) {
		this.attachmentFileName = attackmentFileName;
	}

	@Override
	public String execute() throws Exception {

		if (attachment != null) {
			File out = new File("d:/" + attachmentFileName);
			attachment.renameTo(out);
		}
	
		return super.execute();
	}

}

input.jsp

<form action="upload.action" method="post" enctype="multipart/form-data">

      <input type="file" name="attachment"/>

      <input type="submit"value="submit"/>

  </form>

测试:

提交后打开上传后的文件:

这里还遇到一点小问题,为了简便,我在jsp页面中只是使用了简单的html,结果发现如果想在页面输出中文的话,那么这些中文全部会编程问号。首先怀疑编码问题,在<head>中加了<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />

还是没效果。后来直接在页面中输入中文,提示无法保存保存中文,因为页面编码是iso-8859-1,查看myeclipse的设置发现我们已经将Jsp页面的编码默认设置为了utf8,为啥还提示说是西欧编码呢,后来在页面中加入了<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>,问题解决。原来如果我们在jsp页面中不加这个指令,那么默认还是会使用西欧编码。

多文件上传实例

public class UploadAction extends ActionSupport {

	private File[] attachment;
	private String[] attachmentContentType;
	private String[] attachmentFileName;

	//get/set省略
	@Override
	public String execute() throws Exception {

		if (attachment != null && attachment.length > 0) {
			for (int i = 0; i < attachment.length; i++) {
				File out = new File("d:/" + attachmentFileName[i]);
				attachment[i].renameTo(out);
			}

		}

		return SUCCESS;
	}

Input.jsp

form action="upload.action" method="post" enctype="multipart/form-data">

     <input type="file" name="attachment"/><br>

     <input type="file" name="attachment"/><br>

     <input type="file" name="attachment"/><br>

     <input type="submit" value="submit"/>

  </form>

在这里也遇到一个问题,就是上传文件大小的问题,Struts2默认允许的文件上传大小为2M,我们前面学习到fileUpload拦截器中可以指定文件上传的大小:

<action name="upload" class="action.UploadAction">

           <interceptor-ref name="fileUpload">

              <param name="maximumSize">1024000</param>

           </interceptor-ref>

          

           <interceptor-ref name="basicStack"></interceptor-ref>

          

           <result name="success">/success.jsp</result>

           <result name="input">/input.jsp</result>

          

          

</action>

但是这样配置之后,当上传文件超过靓照的时候还是会报错。这是因为Struts2中有一个常量表示文件上传的大小,只有当fileUpload拦截器中设置的值小于这个常量的值时,拦截器设置的值才起作用。因此我们还需要修改这个常量的值:

<constant name="struts.multipart.maxSize" value="10240000" />

而fileUpload拦截器中关于文件大小的默认值就是这个常量的值!

在多文件上传中,我们的Action成员属性除了使用数组之外还可以使用List,不过需要我们手动给他们初始化才能发挥作用。


手把手复现Apache解析漏洞CVE-2017-15715:Vulhub与Docker实战指南 文件上传漏洞是Web安全领域的常见威胁,攻击者通过上传恶意文件可获取服务器控制权。其原理在于服务器对用户上传文件的类型、内容及路径验证不严,导致危险文件被存储并执行。在众多漏洞类型中,解析漏洞尤为典型,它利用了Web服务器(如Apache、Nginx)在解析请求时的逻辑缺陷。以Apache HTTP Server的CVE-2017-15715漏洞为例,其核心在于正则表达式匹配时,行尾锚点$会匹配文件名末尾的换行符(\x0A),导致如shell.php\x0A.jpg的文件被误判为PHP脚本执行。这种漏洞常出 阅读详情

相关推荐

JSP木马原理剖析与Java Web应用安全防御实战

在Java Web开发领域,JSP(JavaServer Pages)技术因其动态生成网页的能力而被广泛应用。其核心原理在于服务器端将JSP页面编译为Servlet,从而执行内嵌的Java代码并与HTTP请求交互。这一特性在带来灵活性的同时,也引入了安全风险,攻击者可能通过构造恶意JSP文件,利用其执行任意Java代码的能力,在服务器上建立后门,即所谓的JSP木马。这类木马的技术价值在于其隐蔽性和强大的控制力,能够执行系统命令、管理文件,严重威胁数据安全与业务连续性。其典型的应用场景常与文件上传漏洞、配置不

weixin_34221773的博客 611

struts-2漏洞

struts-2漏洞

weixin_48776804的博客 524

Web安全入门:信息收集核心框架与CTF实战技巧

信息收集是网络安全领域的基石,其本质是通过系统化方法获取目标系统的各类暴露信息,为后续安全评估奠定基础。从技术原理看,它遵循由外而内、由浅入深的侦察逻辑,涵盖前端源码、服务器指纹、目录结构及公开情报等多个层面。掌握信息收集不仅能提升漏洞挖掘的精准度,更是构建主动防御思维的关键。在实际的渗透测试和CTF竞赛中,高效的信息收集直接决定了安全测试的成败。通过系统学习前端信息挖掘、服务器指纹识别、目录爆破等核心技能,安全从业者可以快速定位薄弱点,例如在CTFShow的入门题目中,熟练运用开发者工具分析网页源码与网络

weixin_33696822的博客 346

在Struts 2中实现文件上传

Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。                                                               

leagle 1176

冰蝎Webshell免杀实战:从静态混淆到流量伪装的对抗进化

Webshell作为常见的Web后门技术,其核心原理是通过在Web服务器上植入恶意脚本,实现远程命令执行与控制。在攻防对抗中,安全设备通过静态特征码、动态行为分析和网络流量检测等多维度进行防御。为了绕过这些检测,红队工程师需要对Webshell进行系统性改造,这涉及静态代码混淆、动态行为隐藏和网络流量伪装等技术。其中,流量特征伪装是当前对抗的重点,通过改变加密算法、打乱通信格式、模拟正常业务请求,可以有效降低被入侵检测系统(IDS)发现的概率。本文以广泛使用的冰蝎Webshell为例,深入探讨如何通过魔改其

weixin_30785593的博客 381

SSRF漏洞深度解析:从原理到实战利用与防御

服务器端请求伪造(SSRF)是一种常见且危害严重的Web安全漏洞,其核心原理在于攻击者能够诱使服务器向任意内部或外部资源发起请求。由于服务器通常位于受信任的内网环境,这使得SSRF成为攻击者绕过防火墙、探测内网服务、访问云元数据接口甚至实现权限提升的关键跳板。在漏洞赏金和渗透测试中,SSRF常与业务逻辑漏洞结合,例如通过伪造内部API请求实现越权操作(如删除用户“carlos”),其技术价值在于将看似无害的“读取”漏洞转化为具有“写入”或“执行”能力的攻击链。典型的应用场景包括图片URL获取、文件导入、We

weixin_34068198的博客 367

struts2实现的文件上传下载案例(一)、FileUpLoad

实现文件的上传,本质上就是将用户电脑上的文件复制到服务器上所在的电脑上 开发思路: 1,建立和上传源文件有关的输入流; 文件上传过程中的输入流,要通过request对象获取 2,建立和目标服务器文件关联的输出流 输出文件,就是想Action所在的电脑上写入一个文件 3,一边读一遍写。 4,关闭输入输出流 需要注意的是,request.getInputStream()得到的输入流本身包含上传的文...

Java开发,人工智能,边缘计算,致力于掌握前沿技术 684

点餐系统数据库设计--SQL Server

友情链接 1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) 5

若如初见 8万+

struts2 18拦截器详解(十一) --- FileUploadInterceptor

FileUploadInterceptor    该拦截器处于defaultStack第十的位置,看其名称就知道是用于处理文件上传的,对于文件上传有一点大家应该要了解:struts2处理文件上传内部使用的是commons-fileupload组件,当我们在form表单中把enctype属性设置为"multipart/form-data"时表示这是一个文件上传请求,当struts2接收到这

云原生之家 4112

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南)

本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。

weixin_26821003的博客 274

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 481

Struts2 S2-046漏洞深度解析:从异常处理到OGNL注入的攻防实战

在Web应用安全领域,输入验证与异常处理机制是防御体系的关键环节。其核心原理在于对用户提交的所有数据(包括HTTP请求头、参数等)进行严格的合法性校验,防止恶意输入破坏程序逻辑。这项技术的核心价值在于构建纵深防御,确保即使在非正常业务流程(如出错处理)中,应用也能保持安全状态。典型的应用场景包括文件上传、表单提交等用户交互频繁的功能模块。本文聚焦于一个经典案例——Struts2框架的S2-046漏洞,该漏洞正是由于在**异常处理**流程中对用户输入的**Content-Disposition**头部校验不足

weixin_30279315的博客 320

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 452

Linux file命令实战:用魔数和MIME识别文件真实类型

在Linux系统中,文件类型并非由扩展名决定,而是由文件内容的特征字节(即魔数)决定。通过file命令,可以不依赖扩展名快速识别文件的真实格式,无论是被伪装成图片的可执行文件,还是无扩展名的日志数据,都能在几秒内得到可靠判断。file命令基于内置的magic数据库,读取文件头部字节并输出类型信息,结合MIME类型参数可输出标准化结果,便于脚本自动化处理。该工具在运维排查、批量文件审计、下载文件校验等场景中非常实用。掌握file命令的常用参数与工程实践方式,是提升Linux文件管理效率的关键一步。本文从原理到

weixin_34112181的博客 358

卫星遥感影像处理:地物分类与变化检测

卫星遥感影像处理:地物分类与变化检测​ ,人工智能,计算机视觉,大模型,AI,卫星遥感技术通过搭载在卫星上的传感器获取地球表面的电磁波信息,为地物分类与变化检测提供了宏观、动态的观测数据。随着高分辨率遥感卫星(如高分系列、哨兵系列)的发展,遥感影像的空间分辨率、光谱分辨率和时间分辨率不断提升,为精准地物识别和动态变化监测奠定了基础。地物分类旨在将遥感影像中的像元按地表覆盖类型(如植被、水体、建筑、农田等)进行分类,而变化检测则通过对比不同时期的影像,识别地表覆盖的变化区域(如城市扩张、森林砍伐、土地退化等)

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

安装这个软件之前先安装VisualStudio,本文安装这个软件时已经安装了VisualStudio2019。1、下载倍福PLC编程软件TwinCAT。

qq_34059233的博客 3663

SSRF漏洞深度解析:从原理、挖掘到实战利用与防御

服务器端请求伪造(SSRF)是一种常见的Web安全漏洞,其核心原理在于应用程序未能充分校验用户输入,导致攻击者能够操控服务器向任意地址发起网络请求。这一漏洞的根源在于信任边界的突破,服务器错误地信任了来自自身的请求。从技术价值看,SSRF不仅可用于信息泄露,探测内网服务,更可作为攻击内网脆弱应用(如存在RCE漏洞的Struts2、ThinkPHP框架应用)的跳板,甚至通过Gopher等协议与Redis、MySQL等非Web服务交互,实现远程命令执行。在应用场景上,任何需要服务器对外发起请求的功能点,如内容获

chiman6219的博客 325

DDPM代码详细解读(2):Unet结构、正向和逆向过程、IS和FID测试、EMA优化

Diffusion Models专栏文章汇总:入门与实战 前言:大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。上一篇文章介绍了数据集加载,超参数的含义、关键参数的计算方法等,这一篇重点解读一下网络结构。 目录 EMA优化 训练目标.

沉迷单车的追风少年 1万+

TongWeb中文乱码全解析:从编码原理到实战解决方案

字符编码是Web开发中的基础概念,它定义了计算机如何存储和传输文本数据。其核心原理在于将字符映射为二进制字节序列,并在不同系统间保持一致性。UTF-8作为通用编码方案,因其兼容性和广泛支持,成为解决跨平台、跨语言字符显示问题的关键技术价值所在。在Java Web应用场景中,请求/响应流程的编码一致性至关重要,特别是在处理表单提交、数据持久化时。本文聚焦于TongWeb应用服务器,针对其部署后出现的**中文乱码**问题,深入剖析请求数据解码机制,并提供从过滤器配置到服务器调优的完整**解决方案**,帮助开发者

weixin_34007906的博客 320

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 656

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

全栈Web安全学习路线:从零基础到实战攻防的完整指南

Web安全是网络安全领域的核心分支,其本质在于保护Web应用从前端到后端的完整链路免受攻击。其原理基于对HTTP协议、前后端交互机制及数据库操作等基础技术的深入理解,通过识别和利用设计缺陷或实现漏洞来实现攻击。掌握Web安全技术对于构建可信赖的数字服务具有重要价值,广泛应用于渗透测试、安全开发、漏洞挖掘等场景。本文基于SQL注入、XSS等核心漏洞,系统梳理了从网络基础到业务逻辑的全栈学习路径,并融入靶场实践与工具链使用,为初学者提供了一条清晰的进阶路线。

weixin_34268310的博客 404

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

渗透测试 ( 3 ) --- Metasploit Framework (MSF)

Metasploit专业版和精简版的主要差别在于专业版上面集成了全自动攻击模块,通过远程API集成网络分割测试模块、标准基线审计向导模块、闭环漏洞验证优先处理功能、动态载荷规避防病毒解决方案、钓鱼意识管理和鱼叉式网络钓鱼模块、对OWASP Top 10漏洞的Web应用程序测试模块、高级命令行和Web界面的选择模块。但是,专业版是必须要付费的,所以除非用到非个人的功能,否则没有必要去使用专业版,而且,专业版和精简版的渗透攻击模块是一样的。.........

freeking101的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Struts2学习笔记(十六) 文件上传(File Upload)
下一篇: Struts2学习笔记(十七) 文件下载(File Download)
jdluojing
博客等级 码龄17年 79粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值