防止程序重复运行

防止程序重复运行,第1张

Private Sub Form_Load()

If AppPrevInstance = True Then

MsgBox "该程序已经运行。", vbInformation

End

End If

End Sub

由于WINDOWS的多任务处理功能, 有些程序可能打开后忘记了,下次用时还可能再打开,这样做会占用系统资源降低系统效率。为了防止自身被多次运行,可利用VB应用对象提供的PrevInstance属性来检测内存中是否已有一个自身的副本,若有则给出提示后结束。一般将检测代码放在FORM_LOAD()中,因为程序一运行就要检测,一旦有实例运行了它的返回值就是True,也就表明前面至少已经有一个实例在运行

Vbinformation : d出信息对话框,是对话框的一种类型,包括的信息就是"该程序已经运行。"^_^

01

开发软件不等于编码

写程序时会有"编码-->测试-->调试"的习惯很不幸,这是开发软件的错误方法专业的程序员会使用策略来预防、检测及消除软件bug编码不是在开发软件编码的意思是在文本编辑器中输入语句编码只是开发软件的小部分开发软件需要编程前、编程中、编程后的许多步骤下面分着讲解

02

编程前

1、了解需求

2、考虑可能的输入和期望的输出

3、识别出有效但非期望的输入和正确的输出这是对于开发可靠的软件而言是一个关键点

4、识别出无效输入并找到检测它们的方法要注意即使输入无效的数据时,程序也不能奔溃

5、想出解决办法,并记录

6、设计程序,可以节省大量的时间

03

编程中

1、若想正确且更快的完成程序, 就写更多的代码为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案即单元测试

2、使用自动缩进的文本编辑器可以帮你检查代码是否对齐,可以节省宝贵的时间

3、在运行之前一行一行的读代码可以帮你找到通过测试很难发现的问题

4、自己想一些测试例子 若自己不知道自己写的代码,则计算机也不知道

5、尽量使用函数来重构代码,避免复制代码

6、要用版本控制系统(这不是废话吗)

7、编译时,警告信息也不要放过

04

编程后

不要依赖测试,测试只会告诉你程序没有正常工作,不会告诉你程序真的在正常运行很可能测试用例没有涵盖所有可能的方案通过测试用例涵盖所有可能的方案是很困难的

05

常见错误

未初始化变量: 一些人认为所有的变量都会自动初始化为0,C语言中不会初始化通过测试很难测试出来

错误数据类型: 需要理解并正确地使用类型,编程语言的趋势是让数据类型更有限制性,防止犯意外的错误

06

后执行式和交互式调试

调试一个程序分为几个阶段, 举个列子:

1、从一个文件中读取一些整数;

2、把整数排序;

3、把排好序的整数存到另一个文件中;

单元测试: 在上面三部整合之前测试每一部分叫作单元测试

对于单元测试,经常需要写一些额外的代码,作为单独部分的"驱动"调试可能是交互式或后执行式的若程序会花费几个小时,你就不会想要用交互式来调试这个程序了相反,你会想要程序打印出调试信息,即日志

对交互式调试而言打印调试信息存在多个问题:

1、需要插入代码来打印调试信息多数情况下,调试信息必须在随后被移除,因为此信息不应该出现在最终的代码和它的输出中

2、如果有很少的信息,那么就会缺少足够的信息帮助你判断哪里错了

3、如果信息太多,可以忽略不相关的信息,获得好信息是很困难的

4、最糟糕的是,问题可能会出现在意想不到的地方,而那里却并未插入调试信息结果就是添加越来越多的调试信息这是很耗时的

07

生产代码与测试代码分离

自己应该能检测出自身bug的程序编写程序之前就应该考虑编写测试代码这是普遍的做法,这个称为 测试驱动的开发 开发的时候需要将测试代码和开发代码分开,这样可以随意删除测试代码

以下是OMG我为大家收集整理的文章,希望对大家有所帮助。

SQL注入(SQLInjection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入漏洞攻击呢它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。

1 SQL注入漏洞攻击原理

1 1 SQL注入漏洞攻击实现原理

SQL(Structured Query Language)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至 *** 作系统管理用户权限,控制服务器 *** 作系统,获取重要信息及机密文件。

SQL注入漏洞攻击主要是通过借助于HDSI、NBSI和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的 *** 作。下面以一段身份验证的NET代码为例,说明一下SQL 注入攻击的实现方法。

SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettingsAppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + TxtusernameText +"'";

DataSet userSet = new DataSet();

SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);

userAdapterFill(userSet, "Users");

Session["UserID"] =TxtusernameTextToString();

Session["type"] =typeTextToString();

ResponseRedirect("/Myweb/admin/loginaspx");

从上面的代码中可以看出,程序在与数据库建立连接得到用户数据之后,直接将username的值通过session传给loginaspx,没有进行任何的过滤和处理措施, 直接用来构造SQL 语句, 其危险系数是非常高的, 攻击者只要根据SQL 语句的编写规则就可以绕过身份验证,从而达到入侵的目的。

1 2 SQL注入漏洞攻击分析

SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,没有对用户提交的数据类型进行校验,编写不安全的代码,构造非法的SQL语句或字符串,都可能产生这个漏洞。

例如Web系统有一个login页面,这个login页面控制着用户是否有权访问,要求用户输入一个用户名和口令,连接数据库的语句为:

“select from users where username = 'username' andpassword = 'password'”

攻击者输入用户名为aa or 1=1口令为1234 or 1=1之类的内容。我们可以看出实际上攻击者并不知道真正的用户名、口令,该内容提交给服务器之后,服务器执行攻击者构造出的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:

“select from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”

服务器执行查询或存储过程,将用户输入的身份信息和数据库users表中真实的身份信息进行核对,由于SQL命令实际上已被修改,存在永远成立的1=1条件,因此已经不能真正验证用户身份,所以系统会错误地授权攻击者访问。

SQL 注入是通过目标服务器的80端口进行的,是正常的Web访问,防火墙不会对这种攻击发出警告或拦截。当Web服务器以普通用户的身份访问数据库时,利用SQL注入漏洞就可能进行创建、删除、修改数据库中所有数据的非法 *** 作。而当数据库以管理用户权限的身份进行登录时,就可能控制整个数据库服务器。

SQL注入的方法很多,在以手动方式进行攻击时需要构造各种各样的SQL语句,所以一般攻击者需要丰富的经验和耐心,才能绕过检测和处理,提交语句,从而获得想要的有用信息。这个过程需要花费很多的时间,如果以这种手动方式进行SQL注入漏洞攻击,许多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等网站就会安全很多了,不是漏洞不存在了,而是手动入侵者需要编程基础,但现在攻击者可以利用一些现成的黑客工具来辅助SQL注入漏洞攻击,加快入侵的速度,使SQL注入变得轻而易举。

由于SQL注入漏洞攻击利用的是通用的SQL语法,使得这种攻击具有广泛性。理论上说,对于所有基于SQL语言的数据库管理系统都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。当然,各种系统自身的SQL扩展功能会有所不同,因此最终的攻击代码可能不尽相同。

1 3 SQL注入漏洞攻击过程

(1)绕过身份验证

如一个login界面,需要输入用户名和口令,然后Post到另一个页面,进行身份验证,因此攻击者只需在用户名和口令的输入框中都输入aa or’1’=’1’的内容,那么攻击者就可以通过欺骗的验证方式而直接进入下一个页面,并拥有和正常登录用户一样的全部特权。原因是什么呢 我们比较一下正常用户登录和攻击者登录时的两种SQL语句:

1)正常用户(如用户名为admin,口令为1234567) :

SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";

2)攻击者(用户名和口令都为aa or’1’=’1’) :

SQL= " select from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";

可以看到由and连接的两个条件都被一个永远成立的1=1所代替,执行的结果为true,数据库会认为条件恒成立,会返回一个true,让攻击者以合法身份登录进入下一个页面。

(2)执行非法 *** 作

如一个查询页面select1asp id=1,编程人员原本设计意图是显示id为1的查询信息,而攻击者利用程序中没有对id内容进行检查的机制,插入自己的代码。

从select1asp中摘录一段关键代码:

SQL= " select from photo where photoid= 'id'";

可以看到,id没有进行任何的处理,直接构成SQL语句并执行,而攻击者在知道该系统数据库中表名及字段名的情况下,利用SQL语句特性(分号是将两句SQL 语句分开的符号),直接向数据库Tuser表中添加记录:

select1asp id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理员'),然后攻击者就可以直接用hack进行登录了。通过这样的方法,攻击者还可以对系统做任何的事情,包括添加、删除、修改系统资源的 *** 作。

(3)执行系统命令

如果Web主机使用MSSQL数据库管理系统,那么攻击者就可以用到xp_cmdshell这个扩展存储过程,xp_cmdshell是一个非常有用的扩展存储过程,用于执行系统命令,比如dir、net等,攻击者可以根据程序的不同,提交不同的语句:

execmasterdboxp_cmdshell " dir "; exec masterdboxp_cmdshell" net user hack 1234567 /add ";

execmasterdboxp_cmdshell " net localgroup administrators hack /add ";

这样就可以向Web主机系统中成功添加了一个管理员帐户。

2 SQL注入漏洞攻击的检测方式及方法

2 1检测方式

SQL注入漏洞攻击检测分为入侵前的检测和入侵后的检测。入侵前的检测,可以通过手工方式,也可以使用SQL注入漏洞扫描工具软件。检测的目的是为预防SQL注入漏洞攻击,而对于SQL注入漏洞攻击后的检测,主要是针对审计日志的查看,SQL注入漏洞攻击成功后,会在Web Service和数据库的审计日志中留下“痕迹”。

2 2检测方法

(1)动态SQL检查

动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注入成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入作为参数而不是命令来执行,这样就限制了入侵者的行动。当然,它不适用于存储过程中利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,数据库仍然存在SQL注入漏洞攻击的危险。

(2)有效性校验

如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,检查是不是存在不可接受的字符,那就需要设置字符串检查功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。

(3)数据表检查

使用SQL注入漏洞攻击工具软件进行SQL注入漏洞攻击后,都会在数据库中生成一些临时表。通过查看数据库中最近新建的表的结构和内容,可以判断是否曾经发生过SQL注入漏洞攻击。

(4)审计日志检查

在Web服务器中如果启用了审计日志功能,则Web Service审计日志会记录访问者的IP地址、访问时间、访问文件等信息,SQL注入漏洞攻击往往会大量访问某一个页面文件(存在SQL注入点的动态网页),审计日志文件会急剧增加,通过查看审计日志文件的大小以及审计日志文件中的内容,可以判断是否发生过SQL注入漏洞攻击事件;另外还可以通过查看数据库审计日志,查询某个时间段是否有非法的插入、修改、删除 *** 作。

(5)其他

SQL注入漏洞攻击成功后,入侵者往往会添加特权用户(如:administrator、root、sa等)、开放非法的远程服务以及安装木马后门程序等,可以通过查看用户帐户列表、远程服务开启情况、系统最近日期产生的一些文件等信息来判断是否发生过入侵。

3 SQL注入漏洞防范措施

SQL注入漏洞攻击的防范方法有很多种,现阶段总结起来有以下方法:

(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息。

(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框。

SQL=" select from users where username = ’admin’and password= ’1234567’ "

如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:

SQL= " select from users where username='" +TxtuserText + "' and userpwd='" + TextpwdText + "'"

这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息。

(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败。 如:

“select from users where username='" + admin + "' and userpwd='" + 1234567+ "'”

显然会得到与

“select from users where username='admin' and password= '1234567'”

相同的结果。

(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。

(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Webconfig文件进行加密,拒绝访问。

(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。

(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。

(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。

(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除 *** 作,就可以防止不同用户对非授权的数据库进行访问。

4 结束语

SQL注入漏洞攻击在网上非常普遍,许多ASP、PHP论坛和文章管理系统、下载系统以及新闻系统都存在这个漏洞。造成SQL注入漏洞攻击的主要原因是开发人员在系统开发的过程中编程不规范,没有形成良好的编程习惯,问题的解决只有依赖于规范编程。此外,也可以使用现有的SQL注入漏洞扫描器对整个网站中的关键代码进行扫描,查找网站页面中存在的SQL注入点。对于有问题的页面,可以及时删除或更新。本文通过对SQL注入漏洞攻击的方法、原理以及攻击实施过程进行了阐述和总结,并给出了一些常见的SQL注入漏洞攻击防范的方法。

隐藏一个程序的运行最简单的方法是将窗体的Visible设为False。但是只要用Ctrl+Alt+Del将程序列表呼出就完全露馅了。那么怎样彻底隐藏正在运行的程序呢?其实很简单。

我们知道,后台运行的程序有很多。但是只有一部分出现在程序列表里,多数系统程序并不出现。实际上,被注册成为“服务器”的进程不会出现在程序列表里。

所用API函数:=版权所有 热点网络 热点下载 热点网络学院 版权所有=

Private Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessId" () As Long

这个函数可以获得当前进程一个唯一的标识符。

Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long

这个函数可以将进程 ID 号为dwProcessID的进程注册或取消注册为“服务器”。

所用常量:

这里的常量也就是dwType的值。

Const RSP_SIMPLE_SERVICE = 1

注册为“服务器”。

Const RSP_UNREGISTER_SERVICE = 0

取消“服务器”注册。

程序:

Public Sub MakeMeService()

Dim pid As Long, reserv As Long

'获取当前进程ID

pid = GetCurrentProcessId()

'注册为服务器

regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)

End Sub

Public Sub UnMakeMeService()

Dim pid As Long, reserv As Long

'获取当前进程ID

pid = GetCurrentProcessId()

'取消服务器注册

我不知道好不好用啊 你试一下吧

运行里面 regedit net config server /hidden:yes 这个命令就可以 具体的方法是是,用本地安全策略,先打开IP安全策略, 方法是在运行里输入 secpolmsc或着在控制面板里打开: 第一步: 创建IP安全策略 右击刚刚添加的IP安全策略,在本地机器,选择创建IP安全策略,单击下 一步, 然后输入一个策略描

-

局域网隐藏IP地址的方法:具体的方法是是,用本地安全策略,先打开IP安全策略,

方法是在“运行”里输入 secpolmsc或着在控制面板里打开:

第一步:

创建IP安全策略

右击刚刚添加的“IP安全策略,在本地机器”,选择“创建IP安全策略”,单击“下 一步”,

然后输入一个策略描述,如“no Ping”。单击“下一步”,选中“激活默认响应规则”复选项,单击“下一步”。

第二步:

开始设置身份验证方式,选中“此字符串用来保护密钥交换(预共享密钥)” 选项,然后随便输入一些字符(下面还会用到这些字符)。

单击“下一步”,就会提示已完成IP安全策略,确认选中了“编辑属性”复选框,单击“完成”按钮, 会打开其属性对话框。

第三步:

配置安全策略单击“添加”按钮,并在打开安全规则向导中单击“下一步”进行隧道终结 设置,

在这里选择“此规则不指定隧道”。单击“下一步”,并选择“所有网络连接”以保证所有的计算机都Ping不通。单击“下一步”,

设置身份验证方式, 与上面一样选择第三个选项“此字符串用来保护密钥交换(预共享密钥)”并填入与刚才相同的内容。单击“下一步”,

在打开窗口中单击“添加”按钮,打开 “IP筛选器列表”窗口。单击“添加”,单击“下一步”,设置源地址为“我的IP地址”,

单击“下一步”,设置目标地址为“任何IP地址”,单击“下一步 ”,选择协议为ICMP,现在就可依次单击“完成”和“关闭”按钮返回。

此时,可以在IP筛选器列表中看到刚刚创建的筛选器,将其选中之后单击“下一步 ”,选择筛选器 *** 作为“要求安全设置”选项,

然后依次点击“完成”,“关闭”按钮,保存相关的设置返回管理控制台

第四步:

指派安全策略

最后只需在“控制台根节点”中右击配置好的“禁止Ping”策略,选择“指派”命令使配置生效。经过上面的设置,

当其他计算机再Ping该计算机时,就不再相通了。但如果自己Ping本地计算机,仍可相通。此法对于Windows 2000/XP均有效。

在网上邻居上隐藏你的计算机

编辑注册表

将HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanManServerParameters 下Hidden的值从0设置为1,该值是DWORD类型

其它方法:

方法一:使用代理服务器

代理服务器通常有2种类型:>

以上就是关于防止程序重复运行全部的内容,包括:防止程序重复运行、C语言进阶04-预防、检测及消除bug、如何防范SQL注入漏洞及检测等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9659778.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存