php安全编码规范

Delphi中实现透明度可控PANEL组件 Delphi作为一种高效的可视化编程语言,其组件化的开发模式让开发者能够快速构建出复杂的界面。在众多控件之中,TPanel控件扮演着不可或缺的角色,它为界面布局提供了基础支持。标准用法中,开发者通过设置TPanel的属性来定制面板的外观和行为,包括边框、颜色、尺寸等。其中,最为常用的属性包括BevelInnerBevelOuter和Brush等,这些属性帮助定义了面板的视觉样式和布局特性。 阅读详情
安全编码规范是一套面向应用开发人员的安全参考手册。应用开发人员通过阅读文档,获取每一类安全
漏洞产生的防范方法,从而在程序开发过程中尽量避免安全问题的产生。通过安全编码规范的约
束,使开发人员能够养成良好的编程习惯,减少系统安全漏洞的产生。

php安全库rhizobia

目录

一、安全编码基本原则

1.1 所有输入数据都是有害的

直接输入数据:

        对于用户通过 GET, POST, COOKIE, REQUEST等输入的数据以及框架提供的数据来源,即通信协议中从客户端传过来的一切变量,无论是用户手动填写的数据或是客户端浏览器或操作系统自动填写的数据,都可能产生安全问题,需要进行严格的安全性检查。

间接的输入数据:

        从数据库、文件、网络、内部API获取的数据等,即一些不直接来源于用户,但是又不是程序中定义好的常量数据。比如用户的输入经过层层转化输出到数据库或文件,后面又再次利用的时候,这时获得的数据依然是不可信的,同样需要进行严格的安全性检查。

1.2 不依赖运行环境的安全配置

        不能寄希望于配置文件的安全选项,必须将程序置身于最不安全的配置下进行考虑。

1.3 安全控制措施落实在最后执行阶段

        每个安全问题都有其产生的原因,例如SQL注入的原因是SQL语句参数拼接。因此对SQL注入问题的防范,需要在SQL语句执行前对参数进行安全处理,因为此时才能确定预期的参数数据类型、数据范围等。

1.4 最小化

        最小化原则适用于所有安全相关的领域,在代码安全方面主要表现为:

1、用户输入最小化。尽可能少地使用用户的输入。

2、用户输入范围最小化。过滤参数时应使用白名单策略,对于可明确定义范围的参数检查参数的有效性,譬如Email,卡号,身份证号等。

3、返回信息最小化。程序错误信息等应对用户屏蔽,不要将原始错误信息直接返回到用户侧。

1.5 失败终止

        对用户提交的数据进行安全性检查的时候,如果发现数据不符合要求应终止业务的执行,不要试图修正和转换用户提交的参数继续向下执行。

二、 常见漏洞安全编码

2.1 低版本框架、库漏洞

安全方法: 此类安全问题应使用稳定的高版本框架、库进行开发。

2.2 Command Injection

安全方法: 无法规避此类功能时,应使用白名单控制:

if(isset($_POST["target"]))
{
    $target = $_POST["target"];
    switch ($target) {
    case "www.protect.domain": echo "" . shell_exec("nslookup  www.protect.domain") . "";
        break;
    case "web.protect.domain": echo "" . shell_exec("nslookup  web.protect.domain") . "";
        break;
    ...
    default: echo "" . shell_exec("nslookup  www.protect.domain") . "";
    }          
}

2.3 SQL Injection

安全方法:

注意: 不论项目是否使用了框架,涉及到的表名、字段名用户可控时,均应先使用白名单对此类数据进行处理:

switch ($order){
    case "id": $order="id";
        break;
    case "name":$order="name";
        break;
    default :$order="id";  
}

a、未使用框架时,可使用rhizobia_P项目提供的安全方法:

//查询
$result=$this->db->select()->from("table_name")->where("id","=",$id)->execute()->fetchAll();   
//删除
$result=$this->db->delete()->from("table_name")->where("name","like","%".$name."%")->execute();    
//插入
$result=$this->db->insert(array("name","age"))->into("table_name")->values(array($name,$age))->execute();       
//更新
$result=$this->db->update(array("name" => $name))->table("table_name")->where("id", "=", $id)->execute();       

b、使用Yii、laravel、CodeIgniter框架时,可使用框架自带的数据库访问方法。

Yii 2.0

//查询
Users::find()->where(["id"=>$id])->orderBy("name")->select("id,name")->one();
//插入
$user=new Users();
$user->age=$age;
$user->name=$name;
$user->save();
//单条更新
$use=Users::find()->where(["id"=>$id])->orderBy("name")->select("id,name")->one();
$use->name=$name;
$use->save();
//多条更新
$result=Users::find()->where([">","id",$id])->orderBy("name")->select("id,name")->all();
foreach ($result as $item){
    $item->name=$name;
    $item->save();
}
//删除
Users::deleteAll(["id"=>$id]);

Laravel

//查询
DB::table("table_name")->where("id",$id)->orderBy("id")->get();
//插入                       
DB::table("table_name")->insert(["name" => $name, "age" => $age]); 
//更新                    
DB::table("table_name")->where("id", $id)->update(["name" => $name]);  
//删除                    
DB::table("table_name")->where("age", $age)->delete();                                

CodeIgniter

//查询
$result = $this->db->select("*")->from("table_name")->where("userid", $userid)->order_by("id")->get();     
//插入 
$this->db->insert("table_name", array("title" => $title, "userid" => $userid));  
//更新                              
$this->db->where("id",$id)->update("table_name", array("name" => $title, "age" => $age));             
//删除
$this->db->where("id", $id)->delete("table_name");              

2.4 XSS

安全方法:

a、用户可控数据不需存储直接响应的,应编码输出。

// html实体编码输出
$this->securityUtil->encodeForHTML($data);   
// javascript编码输出
$this->securityUtil->encodeForJavaScript($data) 

b、用户可控数据需存储展示或用于其他系统展示的,应过滤危险字符。

$this->securityUtil->purifier($_GET["data"]);

注意: 输入过滤会改变用户输入。应结合具体业务场景搭配使用输入过滤、输出编码。

2.5 CSRF

安全方法:

前端应从cookie中获取在认证通过后植入的csrf_token,并以POST方式提交包含csrf_token值的请求,前端代码如下:

function getCookie() {
    var value = "; " + document.cookie;
    var parts = value.split("; csrf_token=");
    if (parts.length == 2) 
        return parts.pop().split(";").shift();
}

$.ajax({
    type: "post",
    url: "/xxxx",
    data: {csrf_token:getCookie()},
    dataType: "json",
    success: function (data) {
        if (data.ec == 200) {
         //do something
        }
    }
});

后端应从POST请求体中提取csrf_token参数值,进行校验,代码如下:

if(!$this->securityUtil->verifyCSRFToken()){
    return ;   //csrf token 校验失败
}
// 开始处理业务逻辑

注意: 受csrf_token生成方式影响,当存在XSS时,会导致全局CSRF防护措施失效。

2.6 URL Redirect

安全方法: 此类安全问题服务端应根据具体的业务需求防止不安全的重定向:

a、如果跳转后的链接比较少且比较固定,那么可以在服务端对参数进行白名单限制,非白名单里面的URL禁止跳转。

$index=intval($_GET["index"]);
switch($index){
    case 1:  $url="https://www.protect.domain/";
        break;  
    case 2:  $url="https://web.protect.domain/";
        break;
    ...
    default: $url="https://web.protect.domain/";
}
header("Location:".$url);

当链接比较多时,可根据索引从数据库检索。

b、如仅希望在当前域跳转,或因业务需要,跳转的链接经常变化且比较多,应做个二次确认页,对非当前域的链接,提示用户将跳转到其他网站:

$white=[".protect.domain"];
//校验是否为信任域
if(!$this->securityUtil->verifyRedirectUrl($url,$white)){ 
    // 非信任域名,提供二次确认页
}
// 开始处理业务逻辑

2.7 路径可控

安全方法: 无法规避外界指定路径名时,应使用白名单处理:

$directory = $_GET["directory"];
switch ($directory) {
      // $directory重新赋值
      case "./image":$directory="./image";  
             break;
      case "./page":$directory="./page";
             break;
      ...
      default:$directory="./image";
}
while($line = readdir($directory))
{  
     //do something
} 

2.8 Code Injection

安全方法: 无法规避此类功能时,应精确匹配用户提交数据:

$name=strval($_POST["name"]);
$regex="/^[a-zA-Z0-9]{3,20}$/";
if(preg_match($regex,$name,$matches) && $matches[0]===$name)
{
    eval ("echo '" . $name . "';");
}

2.9 Xpath Injection

安全方法: 此类安全问题应精确匹配用户输入:

if(isset($_POST["login"]) && $_POST["login"]){
	if(isset($_POST["password"]) && $_POST["password"]){
		$login = strval($_POST["login"]);
   		$password = strval($_POST["password"]);
   		$xml = simplexml_load_file("./heroes.xml");
   		$regex="/^[a-zA-Z0-9]{3,20}$/";
   		if(preg_match($regex,$login,$match_login) && $match_login[0]===$login){
   		    if(preg_match($regex,$password,$match_password) && $match_password[0]===$password){
   		        $result = $xml->xpath("/heroes/hero[login= '" . $login . "' and password= '" . $password . "' ]");
   		        //业务逻辑
   		    }
   		}
	}
}

2.10 资源泄露

安全方法: 此类安全问题应在相关操作完成后释放资源:

$file = fopen("file.txt", "w") or die("Unable to open file!");
...
//关闭由fopen()函数打开的文件
fclose($file);

2.11 XXE

安全方法: 此类安全问题应在解析XML数据时显式禁止加载外部实体:

//禁止加载外部实体
libxml_disable_entity_loader(true); 
//解析xml数据
$xml = simplexml_load_string($data);

2.12 SSRF

安全方法: 应校验传入ip地址是否为内部ip:

if (!$this->securityUtil->verifySSRFURL($url)) {
    return ; //内部ip
}
//开始处理业务逻辑

2.13 敏感信息泄露

安全方法: 此类安全问题应在代码上线之前删除注释信息(特别是敏感信息),合理设置忽略文件:

a、gitlab/github
项目根目录新建文档 .gitignore,内容可参考.gitignore

b、SVN
新建文档.svnignore,内容可参考.gitignore,执行:

svn propset svn:ignore -R -F .svnignore .

注意: 当使用add的时候,禁止使用:

svn add *

这样会把忽略中的文件也添加到仓库。应使如下命令:

svn add --force .

2.14 越权漏洞

安全方法: 涉及到用户数据的增删改查,应校验数据归属:

$articleId=$_GET["articleId"];
//用户登录状态下,从session取出用户唯一标识userid
$userId = session("userId");
...
//关联用户信息执行数据库操作
$stmt = $db->prepare("UPDATE articles SET del_flag=1 WHERE articleId=? ANS userId=?"); 
$stmt->bind_param("ss",$articleId, $userid);
$stmt->execute();

2.15 MongoDB Injection

安全方法:
涉及到MongoDB的操作,应禁用execute方法,校验数据类型:

$appId  = $this->request->post("appId");
$num = $this->request->post("num");
...
//校验数据类型
if(!is_array($appId)&&!is_array($num)) 
{
    $criteria = ["appId" => $appId, "num" => $num];
    $ret = $this->mongodb->findOne($criteria);
}

预期数据类型明确的(如商品数量),应在接收用户提交数据时直接强制数据类型转换,避免因校验不严谨可能带来的其他问题。

2.16 弱类型漏洞

安全方法:

注意:

a、涉及多字符串拼接进行md5运算时,应在各拼接字符串之间添加分隔符:

//避免md5("1234"."14"."234")===md5("1234"."1"."4234")
md5($secret . "|" . $uid . "|" . $code);  

b、涉及到函数返回结果既可能是布尔值(FALSE),也可能是等同于布尔值(FALSE)的非布尔值且返回结果用于判断时,需显式判断执行结果

以内置函数strpos为例:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

该函数:

1)返回 n e e d l e 在 needle在 needle在haystack中首次出现的数字位置;

2)未找到时返回布尔值FALSE;

3)当 n e e d l e 在 needle在 needle在haystack起始位置出现时,会返回0.

则安全编码应为:

$domain="https://www.protect.domain";
//禁止 if(!strpos($domain,"https")) 或 if(strpos($domain,"https")!=false)的方式
if(strpos($domain,"https")!==false){  
    //处理业务逻辑
}

此类安全问题应使用=== 代替 == , !== 代替 !=。

if (isset($_GET["id"]) && isset($_GET["userId"])) {
    $id = strval($_GET["id"]);
    $userId = strval($_GET["userId"]);
    //防止出现 md5("240610708")==md5("QNKCDZO")
    if (md5($id) !== md5($userId)) {
       return ;
    }
    //业务逻辑
}

2.17 任意文件上传

安全方法: 此类安全问题应校验上传文件大小、后缀、类型等是否符合要求:

$config=array('limit'=>5 * 1024 * 1024, //允许上传的文件最大大小
    'type'=>array(                      //允许的上传文件后缀及MIME
         "gif"=>"image/gif",
         "jpg"=>"image/jpeg",
         "png"=>"image/png")
);

$file = $_FILES["file"];
$data=$this->securityUtil->verifyUploadFile($file, $config);
if($data['flag']!==true){
    return; //上传失败 
}
//生成新的文件名拼接$data['ext']上传到文件服务器

2.18 本地文件包含

安全方法: 无法规避外界指定文件名时,应使用白名单处理:

$filename =$_GET["filename"];
switch ($filename) {
      case "lfi.txt":include("./lfi.txt");
             break;
      ...
      default:include("./notexists.txt");
}

2.19 并发问题

安全方法:

php+mysql(InnoDB、REPEATABLE-READ)

此类安全问题在已使用事务的前提下,应使用悲观锁或乐观锁解决:

悲观锁:

mysqli_query($conn, "BEGIN");
$rs = mysqli_query($conn, "SELECT num FROM oversold WHERE id = 1 FOR UPDATE ");  //for UPDATE 
$row = mysqli_fetch_array($rs);
$num = $row[0];
if($num>0)
{
    //do something
    mysqli_query($conn, "UPDATE oversold SET num = num - 1 WHERE id = 1");
}
if(mysqli_errno($conn)) {
    mysqli_query($conn, "ROLLBACK");
} else {
    mysqli_query($conn, "COMMIT");
}
mysqli_close($conn);

SELECT … FOR UPDATE加悲观锁,保证总是获取最新的数据,适合写入频繁的场景.

乐观锁:
需使用一个新的字段version保存版本号:

mysqli_query($conn, "BEGIN");
$result = mysqli_query($conn, "SELECT num,version FROM oversold WHERE id = 1 ");
$row = mysqli_fetch_array($result);
$num = $row[0];
$version=$row[1];
if($num>0)
{
    //do something
    $stmt=$conn->prepare("UPDATE oversold SET num = num - 1,version=version+1 WHERE id = 1 AND version= ? ");
    $stmt->bind_param("i",$version);
    $stmt->execute();
}
if(mysqli_errno($conn)) {
    mysqli_query($conn, "ROLLBACK");
} else {
    mysqli_query($conn, "COMMIT");
}
mysqli_close($conn);

乐观锁比较适合数据修改比较少,读取比较频繁的场景。

注意: 悲观锁会带来比较大的性能开销,而乐观锁可能会读取到脏数据,具体采用哪种加锁方式可根据具体业务场景确定。

php+redis

当redis版本不小于2.6.12时,应使用set指令限流避免并发问题。set指定用法如下:

redis > SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX]
  ● EX seconds - 设置指定的过期时间,单位为秒。
  ● PX milliseconds - 设置指定的过期时间,单位为毫秒。
  ● NX - 仅当KEY不存在时,设置KEY的值为VALUE。
  ● XX - 仅当KEY存在时,设置KEY的值为VALUE。

代码示例:

$res=$redis->set($key, $value, ["nx", "px"=>$ps]);
if(!$res){
    throw new Exception("操作太快了,请稍后再试!"); 
}
//开始处理业务逻辑

以上代码,在 p s 毫 秒 内 , 对 指 定 的 ps毫秒内,对指定的 ps毫秒内,对指定的key,仅允许执行一次业务逻辑。

注意: 涉及到的key应结合具体业务场景注意key过期时间的设置,防止key的膨胀。

2.20 WebSocket跨站劫持

安全方法: 此类安全问题服务端应校验Origin头:

$origin="https://www.protect.domain/";
...
function CheckOrigin(){
    if (array_key_exists("Origin", $_SERVER)) {
        $value = $_SERVER["Origin"];
        if($origin===$value){   
            return ture;
        }
    }
    return false;  
}
Delphi自定义控件VkPanel开发与实战应用 VkPanel是Delphi平台上一款高度可定制的自定义面板控件,专为提升用户界面美观性与交互体验而设计。它突破了标准TPanel控件在样式和功能上的限制,支持背景图设置、边框颜色与宽度自定义、丰富的绘制事件等高级功能。其开发初衷是为了满足现代应用程序对界面美观和跨平台一致性的需求,尤其适用于需要高度定制UI的企业级开发场景。VkPanel不仅具备良好的封装性,还提供了友好的设计时支持,使开发者可以在IDE中直接进行可视化编辑。 阅读详情

相关推荐

PHP软件安全编码规范V2.4.docx

目 录 1 PHP接口安全 4 1.1 指定公布给外部的资源,客户端只能访问允许访问的资源 4 1.1.1 说明 4 1.1.2 应对 4 1.1.3 举例 4 1.2 定义所有接口的参数,并做严格的检查 5 1.2.1 说明 5 1.2.2 应对 5 1.2.3 举例 5 1.3 不能让客户端看到任何不友好的错误信息 5 1.3.1 说明 5 1.3.2 应对 5 1.3.3 举例 5 二、PHP编码安全 6 2.1 POST/GET参数传值/字符串输入/数据入库等严格的危险字符过滤处理 6 2.1.1 说明 6 2.2.2 应对 6 2.2.3 举例 6 2.2 相关PHP的I/O操作,需要注意限制权限,文件名或目录名或内容都要做好过滤处理 8 2.2.1 说明 8 2.2.2 应对 8 2.2.3 举例 8 2.3 敏感信息(如PASSWORD/银行帐号等)不要依赖COOKIE,SESSION,最好读表,并尽量缓存读表数据 8 2.3.1 说明 8 2.3.2 应对 9 2.3.3 举例 9 2.4 注意对网站根目录及下面所有子目录及文件的权限控制与保护,不要让配置文件/系统信息等文件暴露 10 2.4.1 说明 10 2.4.2 应对 10 2.4.3 举例 10 2.5 屏蔽或定制化出错信息 10 2.5.1 说明 10 2.5.2 应对 11 2.5.3 举例 11 2.6 数据库的读取等操作、POST/GET传值需要做频率限制与Token校验 11 2.6.1 说明 11 2.6.2 应对 11 2.6.3 举例 11 2.7 有类似文件下载/或文本流下载等功能的,尽量避免使用URL直接调用目标文件地址的方式 12 2.7.1 说明 12 2.7.2 应对 12 2.7.3 举例 12 2.8 MYSQL 的用户最好分开,不要用ROOT用户来连接MYSQL 13 2.8.1 说明 13 2.8.2 应对 13 2.8.3 举例 13 3 参考内容 13

PHP安全 [安全编码]

总则: 绝对安全的系统是不存在的。最好的安全机制应该能在不防碍用户,并且不过多地增加开发难度的情况下做到能满足需求。 木桶原理,一个系统的的强度是由它最薄弱的环节决定的。 安全编码细则: 所有输入的数据都是有害的(直接或者间接由用户输入的) 不依赖运行环境的安全配置 安全控制措施落实在最后执行阶段 最小化 失败终止 文件系统安全 源码: <?php //从用户目录中删除指定的文件 $username = $_POST['user_submitted_name']; $us.

weixin_45253622的博客 7931

PHP编码规范(安全,编码,环境)

根据经验整理的PHP编码规范,可以用作给大家的范例和参考,根据需要进行取舍和修改!

php代码编写性能、安全、规范、效率优化教程

在编写PHP代码时,我们需要确保代码的安全性、可读性、可维护性和易用性。对于安全性方面,我们需要关注全局变量和魔术常量的使用、避免硬编码机密信息、使用正确的退出方法、使用密码哈希表等,以避免代码运行时遇到意外的问题。此外,了解如何处理错误、使用注释和文档化、避免使用eval和exec等函数,可以提高代码的可读性和可维护性。在优化性能方面,我们需要了解如何优化数据库查询、使用缓存机制、避免使用不必要的循环和递归等常见的性能问题。

Innocence_0的博客 1304

java,c/c++,php,c#安全编码规范

java,c/c++,php,c#安全编码规范,从代码层面避免被入侵 1 业务安全编码规范 6 1.1 输入验证和数据合法性校验 6 1.1.1 避免SQL注入 6 1.1.2 避免XML注入 6 1.1.3 避免跨站点脚本(XSS) 7 1.1.4 避免跨站请求伪造(CSRF) 8 1.1.5 避免敏感信息泄露 12 1.2 安全框架 12 1.2.1 Apache Shiro安全框架 12 1.2.2 webSecrity安全框架 13 1.2.3 Enterprise Security API 13 2 基础安全编码规范 15 2.1 声明和初始化 15 2.1.1 避免类初始化的相互依赖 15 2.2 表达式 16 2.2.1 不可忽略方法的返回值 16 2.2.2 不要引用空指针 16 2.2.3 使用Arrays.equals()来比较数组的内容 16 2.3 数字类型和操作 17 2.3.1 防止整数溢出 17 2.3.2 避免除法和取模运算分母为零 18 2.4 类和方法操作 18 2.4.1 数据成员声明为私有,提供可访问的包装方法 18 2.4.2 敏感类不允许复制 18 2.4.3 比较类的正确做法 19 2.4.4 不要硬编码敏感信息 19 2.4.5 验证方法参数 19 2.4.6 不要使用过时、陈旧或低效的方法 20 2.4.7 数组引用问题 20 2.4.8 不要产生内存泄露 20 2.5 异常处理 21 2.5.1 不要忽略捕获的异常 21 2.5.2 不允许暴露异常的敏感信息 21 2.5.3 不允许抛出RuntimeException, Exception,Throwable 22 2.6 多线程编程 23 2.6.1 确保共享变量的可见性 23 2.6.2 确保共享变量的操作是原子的 24 2.6.3 不要调用Thread.run(),不要使用Thread.stop()以终止线程 26 2.6.4 确保执行阻塞操作的线程可以终止 26 2.6.5 相互依存的任务不要在一个有限的线程池执行 27 2.7 输入输出 27 2.7.1 程序终止前删除临时文件 27 2.7.2 检测和处理文件相关的错误 27 2.7.3 及时释放资源 27 2.8 序列化 28 2.8.1 不要序列化未加密的敏感数据 28 2.8.2 在序列化过程中避免内存和资源泄漏 29 3 其他参考资料 30

PHP编码规范(中文版)

PHP团队开发编码规范,代码规范

整理了一份比较全面的PHP开发编码规范.

这些年来多从事Linux下PHP和C相关的开发,带过很多项目和团队,下面是根据经验整理的PHP编码规范,可以用作给大家的范例和参考,根据需要进行取舍和修改!(可能最新的一些php5的规范不够完整,今后有机会保持更新!)目录1 编写目的2 整体要求3 安全规范3.1 包含文件3.1.1 命名规则3.1.2 存放规则3.2 安全规则3.3 一些针对PHP的规则3.4 其它处理规则3.4.1 对

路 2万+

PHP安全SDK及编码规范

PHP安全SDK及编码规范

十大安全设计原则与安全编码原则

十大安全设计原则与安全编码原则

软件质量优化 5499

EDA的未来:当AI与Cadence Virtuoso相遇

本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。

weixin_28312391的博客 652

基于FSL的DTI数据预处理流程

最近在学习处理DTI数据,总结了一份应用FSL做DTI数据预处理的流程与大家交流交流。如果有错误的地方欢迎大家指正!        我用的数据是Philips的数据,如果是GE或者西门子的数据可能会有所不同。   原始数据:包括3DT1数据和高分辨率DTI数据,均是dicom格式。 工具:MRICRON和FSL,所有的命令均在Linux的终端中运行。   1.格式转换:将后缀名为dcm

zaza_zaza的博客 2万+

[转]陌陌Java安全编码规范

陌陌Java安全编码规范 https://github.com/momosecurity/rhizobia_J JAVA安全编码规范 目录 1、安全编码基本原则 1.1 所有输入数据都是有害的 1.2 不依赖运行环境的安全配置 1.3 安全控制措施落实在最后执行阶段 1.4 最小化 1.5 失败终止 2、常见漏洞对应的安全编码方法 命令注入 代码注入 SQL注入 Mongo注入 XXE Xpath注入 XSS CSRF URL跳转漏洞 SSRF 任意文件遍历 文件上传 反序列化漏洞 WebSo.

喜欢前端的后端 MelodyJerry 2697

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1977

Delphi制作带渐变颜色Panel

//这个是一个组件,不能直接运行,需要安装:-) Code 1//全部完整代码,欢迎使用 2 3unitGradientPanel; 4 5interface 6 7uses 8Windows,Messages,SysUtils,Classes,Controls,Graphics,ExtCtr...

weixin_30410999的博客 887

Qt6安装保姆级教程:从国内镜像下载到配置避坑指南(附清华/中科大源)

本文提供详细的Qt6安装与配置指南,重点介绍如何利用清华大学、中国科学技术大学等国内镜像源解决下载速度慢的问题。内容涵盖在线安装器获取、组件选择策略、环境变量配置以及常见编译与部署问题的排查方法,旨在帮助国内开发者高效、顺畅地完成Qt6开发环境搭建。

weixin_29281915的博客 633

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

m0_60898338的博客 1118

改变 Panel 跟 groupbox边框样式

更改panel和groupbox的边框颜色因为在控件的属性中没有设置边框颜色的属性只有一个设置边框样式,遂在网络中搜寻出一下方法: panel的边框颜色在paint中重新对颜色进行定义 private void panel1_Paint(object sender, PaintEventArgs e) { ControlPaint.DrawBorder(e.Graphics, ...

weixin_30757793的博客 284

Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)

本文介绍了如何基于Spring Boot 3.2、Spring AI 1.0.0-M4、DeepSeek API和Redis构建具备上下文记忆功能的智能聊天应用。项目采用现代化技术栈,包括Java 17、Maven、Lombok等,实现了智能对话、会话管理、异常处理等核心功能。文章详细讲解了环境搭建、配置管理(含Redis和AI服务集成)、核心组件设计(如消息实体、控制器和服务层实现),以及完整的项目结构。该项目提供了美观的Web界面和REST API,支持对话上下文存储(通过Redis实现)和系统监控,可

博客 829

DELPHI美化界面

1.透明问题。 要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比。(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件。所有控件都是不透明的,并且大部分控件就是灰色的,一放到窗体上,就像一块膏药一样贴在上面。即使界面上放几副图片也难以和控件的那种灰灰的颜色融合起来。所以,一直在想QQ是怎么开发的。还是挺佩服腾讯那帮家伙的。

crkres9527 1万+

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1488

Python 爬虫实战:Steam 游戏数据爬取与游戏市场分析

本文介绍了一个基于Python的Steam游戏数据分析项目。通过爬取Steam公开API和游戏详情页,获取游戏列表、价格、评价、标签等数据,结合SteamSpy统计销量和在线人数。项目使用requests、BeautifulSoup4进行数据采集,pandas处理数据,pyecharts和seaborn进行可视化。核心步骤包括:1)获取全量游戏列表并过滤;2)异步请求游戏详情处理限速;3)提取关键字段如价格、评分、标签;4)多维分析价格分布、标签热度等。技术栈涵盖API请求、HTML解析、数据存储与可视化,

u014481728的博客 306

DELPHI美化界面[转载]

手头的项目做的差不多了,交给客户,结果给出的结论是界面太难看了,至少要做成像QQ类似的界面。(目前是QQ2009界面确实还是不错的,本人也非常喜欢)。 1.透明问题。 要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比。(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件。所有控件都是不透明的,并且大部分控件就是...

weixin_30530939的博客 3729

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Delphi美化界面 转载

手头的项目做的差不多了,交给客户,结果给出的结论是界面太难看了,至少要做成像QQ类似的界面。(目前是QQ2009界面确实还是不错的,本人也非常喜欢)。 1.透明问题。 要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比。(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件。所有控件都是不透明的,并且大部分控件就是灰色的,...

169

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

delphi 简单界面设计总结

panel控件: 相当于一个容器,可将其他控件放在它上面。 更改它的Align属性,可自动使其处于界面的上下左右中位置,且鼠标拖动后不会改变其位置。 Color可改变panel的颜色。也可直接设置其RGB:Panel.Color:=RGB(200,200,200); BevelOuter属性设置成bvNone可去掉panel的边框。 pageControl控件: 在panel上放...

kisssfish的博客 3029

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Linux木马查杀辅助脚本
Jaskzon
博客等级 码龄8年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值