2. 使用安全性,能否保证用户使用安全。
3. 程序测试,一个好的程序是测试出来的,不是某个设计者闭门造出来的。
对于程序员来说,我们除了需要了解不同编程开发语言的安全管理方法以外,同时我们也需要建立管理员账户来进行安全维护,下面IT培训http://www.kmbdqn.cn/就一起来了解一下具体情况吧。
1.使用良好资源
从安全编码入门资源开始。开放网络应用安全计划(OWASP)是安全编码实际上的入门资源。其安全编码“快速参考指南”是个极好的起始点,可作为开发过程中的复核工具使用。放心充分利用他们的资源。
2.采用防御性编程技巧
这么做可以一定程度上避免出现可利用漏洞。其中一招是等价比较:把常量放到比较语句的前端。常量前置的话,如果不小心把比较 *** 作符(两个等号“==”)误敲成赋值 *** 作符(一个等号“=”),在编译或运行时阶段就会报错。
3.清洗数据
数字身份,尤其是消费级数字身份系统,往往会调用外部数据源。来自外部源或由用户提供的所有数据都应该被当成不可信的。对Web客户端来说,这些数据包括从查询字符串或散列参数、cookie、本地存储等等获取的数据对服务器端应用来说,这些数据包含通过POST、GET、cookie等等提交的数据。原生应用常会读取配置文件,而这些配置文件有可能被故意篡改。
无论如何,一道防线都是数据清洗:确保数据中仅含有经允许的字符/格式。其中一个重点是检查大数据域长度,避免缓冲区溢出攻击。
安全文件传输程序?就是TCP传输吧:随便写了下,好多地方都没怎么验证,比如待发送的文件是否存在;代码如下(此程序用于WINDOWS,我用的是VC调试的,LINUX下方法略有不同)文件接收端:#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <io.h>
#include <winsock2.h>
#include <fcntl.h>
#include <sys\stat.h>
int recv_file(SOCKET sock)
{
char buffer[1024] = {0}
int name_len
/*首先读取sizeof(int) 即4个字节的内容,服务器发送文件名之前会把该文件名的长度发送过来*/
if (recv(sock,(char *)&name_len,sizeof(int),0) <0)
{
printf("远程服务器断开")
return -1
}
/*接收即将传输文件的文件名*/
if (recv(sock,buffer,name_len,0))
{
printf("远程服务器断开")
return -1
}
/*创建该文件,最好此处加上判断,该文件是否已经存在*/
int fd = open(buffer,O_RDWR|O_CREAT ,S_IFMT )
if (fd <0)
{
printf("文件创建失败\n")
return -1
}
int recv_count = 0
/*从套接字循环读取文件内容*/
while ((recv_count = recv(sock,buffer,sizeof(1024),0))>0)
{
/*将读取到的内容保存至文件,recv_count为从网络上读取到得字节数,然后原数保存至文件*/
write(fd,buffer,recv_count)
}
printf("文件接收完成,成功保存至当前目录下\n")
return 0
}
void main()
{
WSADATA wsa_data
/*windows 下使用sock 必须调用这个函数,0x0202是一个版本号*/
WSAStartup(0x0202,&wsa_data) SOCKET s_sock
/*创建套接字*/
s_sock = socket(AF_INET,SOCK_STREAM,0)/*定义本机绑定套接字需要的IPV4地址*/
sockaddr_in se_addr
se_addr.sin_family = AF_INET
se_addr.sin_port = htons(1024)/*指定端口号1024*/
se_addr.sin_addr.S_un.S_addr = INADDR_ANY/*绑定本机任意网卡IP*/ /*将前两步创建的套接字和IP地址绑定*/
bind(s_sock,(sockaddr*)&se_addr,sizeof(sockaddr))/*开始启动监听服务*/
if (listen(s_sock,10)<0)
{
int err = GetLastError()
}
sockaddr_in from_addr
int addr_len = sizeof(from_addr)
/*等待发送文件服务器连接,此为阻塞函数*/
SOCKET temp_sock = accept(s_sock,(sockaddr *)&from_addr,&addr_len)/*有服务器连接到本机,调用接收文件函数*/
recv_file(temp_sock)
} 文件发送端:#pragma comment(lib,"ws2_32.lib")#include <stdio.h>
#include <io.h>
#include <winsock2.h>
#include <fcntl.h>
#include <sys\stat.h>
int send_file(SOCKET sock,char *name)
{
int fd = open(name,O_RDWR ,S_IFMT )
if (fd <0)
{
printf("文件打开失败\n")
return -1
} int name_len = strlen(name)
/*首先发送文件名的长度*/
send(sock,(char *)&name_len,sizeof(int),0)
/*发送文件名*/
send(sock,name,name_len,0)
char buffer[1024] = {0}
int read_count = 0
/*循环从文件中读取,然后写入到套接字,发送到网络*/
while ((read_count = read(fd,buffer,sizeof(1024)))>0)
{
send(sock,buffer,read_count,0)
}
printf("文件发送完成\n")
return 0
}
void main(int argc,char *argv[])
{
WSADATA wsa_data
WSAStartup(0x0202,&wsa_data)
SOCKET s_sock
s_sock = socket(AF_INET,SOCK_STREAM,0)
sockaddr_in to_addr
to_addr.sin_family = AF_INET
to_addr.sin_port = htons(1024)
/*指定接收文件IP为本机(127.0.0.1为本机IP),如其他主机请更改此IP,正常来说,IP应写入配置文件*/
to_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1")
char file_name[256] = {0}
printf("请输入要发送的文件名,并确保该文件存在于当前目录下\n")
scanf("%s",file_name)/*连接接收文件的电脑*/
if (connect(s_sock,(sockaddr *)&to_addr,sizeof(sockaddr)) <0)
{
printf("链接接受文件电脑失败\n")
return
} /*调用发送文件函数*/
send_file(s_sock,file_name)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)