目录
6.2避免相对路径导致的安全问题(DLL、EXE劫持等问题)
C/C++一般使用驼峰命名的方式进行命名
C语言:
a:文件命名统一采用小写字符
b:文件名命名只允许使用小写字母、数字以及下划线(_)。
c:文件名应尽量简短、准确、无二义性。
C++:
a:C++文件以.cpp结尾,头文件以.h结尾
b:C++的头文件和cpp文件名和类名保持一致,使用下划线小写风格
C/C++:
a:函数命名统一使用大驼峰风格
b:函数的命名遵循阅读习惯;
动作类函数名,可以使用动宾结构。如:AddTableEntry()
判断型函数,可以用形容词,或加 is:DataReady()
数据型函数:TotalCount()
a:类型命名采用大驼峰命名风格。
b:通过 typedef 对结构体、联合体、枚举起别名时,尽量使用匿名类型。
c:若需要指针自嵌套,可以增加 ‘tag’ 前缀或下划线后缀。
a:变量命名使用小驼峰风格
b:全局变量应增加 ‘g_’ 前缀,函数内静态变量命名不需要加特殊前缀
c:局部变量应该简短,且能够表达相关含义
避免使用不执行边界检查的字符串函数,因为它们可能被用来进行缓冲区溢出攻击。例如strcpy、strcat、sprintf、wcscpy、mbscpy等,这些函数可以输出一长串字符串,而不限制长度。如果环境允许,应当使用其_s安全版本替代,或者使用n版本函数。
system、WinExec、CreateProcess、ShellExecute等启动进程类的函数,需要严格检查其参数。
_alloca 和可变长度数组使用的内存量在编译期间不可知。尤其是在循环中使用时,根据编译器的实现不同,可能会导致:a:栈溢出,即拒绝服务;
b:缺少栈内存测试的编译器实现可能导致申请到非栈内存,并导致内存损坏。
2.4printf系列参数必须对应
所有printf系列函数,如sprintf,snprintf,vprintf等必须对应控制符号和参数。
所有printf系列函数,要防止格式化完的字符串泄露程序布局信息。%p的值只应当在程序内使用,而不应当输出到外部或被外部以某种方式获取。
2.6对数组delete时需要使用delete[]
2.7注意隐式符号转换
两个无符号数相减为负数时,结果应当为一个很大的无符号数,但是小于int的无符号数在运算时可能会有预期外的隐式符号转换。
在C/C++中,有一些函数是安全的,可以避免缓冲区溢出。如strcpy_s、strcat_s、sprintf_s、snprintf等函数,它们都是带有长度参数的,可以确保不会写入超出缓冲区长度的数据。
在处理字符串时,要注意检查输入的字符串长度,确保不会超出缓冲区长度。可以使用strlen函数来获取字符串长度,然后与缓冲区长度进行比较。
可以使用动态内存分配函数,如malloc和realloc,在运行时动态分配缓冲区,避免固定缓冲区大小不足的问题。
STL提供了多种容器,如vector、list、map等,这些容器会自动管理内存,避免了手动分配内存的问题。
检查所有的输入数据的有效性,以防止注入攻击、缓存区溢出等漏洞的产生。
要避免整数溢出,可以使用较大的数据类型来存储整数变量,或者对变量进行检查。
避免整数溢出的措施:
a:使用正确的数据类型:根据实际情况选择合适的数据类型,如使用long long代替int64_t,避免数据类型不匹配的问题。
b:检查溢出情况:在进行整数运算时,可以使用条件语句判断是否发生了溢出,避免数据丢失或者错误。
switch中应该有default,以处理各种预期外的情况。这可以确保switch接受用户输入,或者后期在其他开发者修改函数后确保switch仍可以覆盖到所有情况,并确保逻辑正常运行。
包含过多信息的Debug消息不应当被用户获取到。Debug信息可能会泄露一些值,例如内存数据、内存地址等内容,这些内容可以帮助攻击者在初步控制程序后,更容易地攻击程序。
a:如果业务需求是认证加密数据传输,应优先考虑直接用 HTTPS 协议。
b:如果是其它业务需求,可考虑由服务器端生成对称秘钥,客户端通过HTTPS等认证加密通信渠道从服务器拉取。
c:根据用户特定的会话信息,比如登录认证过程可以根据用户名用户密码业务上下文等信息,使用HKDF等算法衍生出对称秘钥。
d:使用 RSA/ECDSA + ECDHE 等进行认证秘钥协商,生成对称秘钥。
4.4有逻辑联系的数组必须仔细检查
4.5避免函数的声明和实现不同
在头文件、源代码、文档中列举的函数声明应当一致,不应当出现定义内容错位的情况。
当开发中遇到较长的句子时,如果选择了复制粘贴语句,要检查每一行代码,不要出现上下两句相同的情况,这通常代表代码出现了错误
a:有/无符号整数运算溢出
b:整形转换时出现数据截断
c:对有符号整数使用为操作符运算
5.3有符号整数溢出的结果有不确定性,无符号整数溢出会出现反转环绕
在进行文件操作时,需要判断外部传入的文件名是否合法,如果文件名中包含 ../ 等特殊字符,则会造成路径穿越,导致任意文件的读写。
6.2避免相对路径导致的安全问题(DLL、EXE劫持等问题)
在程序中,使用相对路径可能导致一些安全风险,例如DLL、EXE劫持等问题。
在创建文件时,需要根据文件的敏感级别设置不同的访问权限,以防止敏感数据被其他恶意程序读取或写入。
a:内存拷贝/分配时未检验合理性
b:引用空指针/野指针/未定义指针/已释放内存的指针
c:使用不匹配的内存管理操作、重复释放、使用有隐患的函数比如realloc和alloca等;
导致拒绝服务攻击(比如程序崩溃)、执行任意代码(溢出越界)等
任意地址写会导致严重的安全隐患,可能导致代码执行。因此,在编码时必须校验写入的地址。
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象