逻辑越就是通过别的传参判断,就是比如说看id值。

当inPut的被改变的时候处发后面的函数。

不是。代码里的 . 相关操作是查找文件后缀的分隔符位置,而非直接切割;下面的 for 循环里的 i 是数组的索引,用于遍历允许的文件后缀数组做校验。但代码存在多处语法错误,先拆解逻辑再修正问题:
一、核心代码的逻辑拆解
这段代码的意图是校验文件后缀是否为允许的格式(jpg/gif/png),关键步骤的真实作用:
-
a.lastIndexOf('.') :不是切割,是查找字符串中最后一个 . 的下标位置(比如文件名 test.jpg ,会返回 4 ),为后续截取后缀做准备;
-
a.substr(s+1) :这一步才是切割/截取,从 . 的下一个位置开始截取到字符串末尾,得到文件后缀(比如 test.jpg 会截取到 jpg );
-
for 循环中的 i :是数组 a 的索引,遍历 ['jpg','gif','png'] 这个允许的后缀数组,逐个对比截取到的后缀 c 是否合法。
二、代码中的关键语法错误(导致逻辑失效)
-
大小写错误: lastindexOf 应为 lastIndexOf (JavaScript区分大小写),否则会报方法未定义;
-
拼写错误: substp 是笔误,正确的截取方法是 substr 或 substring ;
-
变量未定义: s 是 a.lastIndexOf('.') 的结果,但代码里 a 是后缀数组 ['jpg','gif','png'] ,并非文件名,变量逻辑完全错位(应该把文件名作为参数传入 ss() 函数,而非直接用 a );
-
循环语法错误: for (i=0;i<a.length;i++) 缺少 var / let 声明 i ,且 if(c===a[i]) 后无执行逻辑(缺少大括号或处理代码)。
三、修正后的正确逻辑示例
javascript
// 传入文件名参数,校验后缀是否合法
function checkFileSuffix(filename) {
// 允许的后缀数组
var allowSuffix = ['jpg', 'gif', 'png'];
// 找最后一个.的位置
var dotIndex = filename.lastIndexOf('.');
// 截取后缀(处理无.的情况)
var suffix = dotIndex === -1 ? '' : filename.substr(dotIndex + 1);
// 遍历数组校验,i是数组索引
for (var i = 0; i < allowSuffix.length; i++) {
if (suffix === allowSuffix[i]) {
return true; // 后缀合法
}
}
return false; // 后缀非法
}
// 调用示例
console.log(checkFileSuffix('test.jpg')); // true
console.log(checkFileSuffix('test.txt')); // false
需要我帮你写一份完整的文件上传后缀校验代码(包含前端文件选择、后缀校验、阻止非法上传)吗?

你是把代码里是把代码里的** upload.php **看成了"up LED",这是视觉上的文字排版/显示误差导致的误读。表单最终会提交到后端的 upload.php 文件,而非所谓的"up LED",具体的提交逻辑和后续处理如下:
一、表单提交的目标
代码里 <form action="upload.php" method="POST" enctype="multipart/form-data"> 的 action 属性明确指定:前端表单的所有数据(包括上传的文件),会通过POST请求提交到同目录下的 upload.php 文件。
二、提交的完整流程
-
前端校验先行:选择文件时,会触发 CheckFileExt 函数校验后缀,合法则弹"后缀正确",非法则弹"后缀错误"并刷新页面;
-
表单实际提交:若前端校验通过,点击"上传文件"按钮后,浏览器会把文件以 multipart/form-data 格式(文件上传的专用格式)发送到 upload.php ;
-
后端处理核心: upload.php 会通过PHP的 $_FILES 超全局数组接收文件数据,执行文件移动、后缀二次校验、存储等操作(这也是你之前看到的PHP上传代码的作用)。
三、关键补充
前端的JS校验只是"第一道防线",恶意用户可以绕过前端校验直接向 upload.php 提交数据,因此** upload.php 必须做后端的二次校验**(后缀、大小、文件类型等),否则会存在文件上传漏洞。
需要我帮你梳理前端校验与 upload.php 后端处理的衔接代码,让你清楚整个文件上传的完整链路吗?

其实核心偏差在于**"过滤成功"和"把数据交给后端"之间没有自动关联**,你理解的"过滤成功就交数据"是一个连贯的动作,但实际是两个独立步骤,用通俗的方式拆解就很清楚了:
你想的逻辑:选文件→过滤成功→自动把文件传给后端
实际的逻辑:选文件→过滤成功(仅弹提示)→用户手动点"上传"→才把文件传给后端
而且当前代码里,就算过滤失败,只要你在页面刷新前快速点击"上传"按钮,非法文件依然能被提交到后端------因为前端过滤只是"提醒",没有真正锁住表单提交的大门。
简单说,你理解的"过滤成功就交数据"是**"自动传递",但实际是"手动触发传递,过滤只是提前检查"**,这是两者最关键的区别。
需要我帮你写一段带自动提交功能的代码,实现"过滤成功后无需点击按钮,自动把数据传给后端"吗?
这个是直接在前端给你判断,在选择的时候触发过滤,直接在选择的时候给你操作了,无需上传。


这里必须有完整的路径,不然只是请求本地的,而不是服务器的路径,服务器可以这么写因为可以直接调用。
要用浏览器的完整地址访问。

但是我懒得搞了,算了,还是搞一下。
突然发现我这个代码的逻辑,他是上传之后不影响上传成功的,虽然是空的。

话说回来。,这样改了之后就正常了。


这东西只能获取class的值。

他逻辑我看懂了,但是我懒得打。


逻辑漏洞全看这里,看看是在哪个阶段做什么事。
如果执行操作在前端就不安全。

他的思路是对比。

这个路径感觉就是伪路径,这玩意儿我也不怎么会操作,算了,就这样,之后再补。

一个是命令执行,一个是代码执行(把字符串当成代码解析)





首先先找到头文件,然后才是放在哪个目录下,名字叫什么,以及开发者或者生产者模式。

这是头文件引用

这就是他打包的东西。


这是那个什么鬼调试模式下面的,正常的话你只能看到一个。

如果是正常模式下,你只能看到这样。
