php的sql注入,php防止sql注入的方法有哪些

本文目录一览:

php防止sql注入以及xss跨站脚本攻击

1.post数据

封装转义函数 防sql注入  eag:addslashes($username);addslashes($password); 

eag:防止sql注入函数封装 

function deepslashes($data){

#判断$data的表现形式 并且需要处理空的情况

if(empty($data)){

return($data);

}

#高级简写 return is_array($data) ? array_map(‘deepslashes’,$data) : addslashes($data);

#初级写法

if(is_array($data)){

#递归循环遍历处理多维数组

foreach ($data as $v) {

return deepslashes($v);

}

}else{

#单一变量

return addslashes($data);

}

#初级写法

}

2.get数据

指url 传参数导致sql发生改变

解决方案

①强制转换,使用函数intval 或者 数据类型 的关键字int

②隐式转换,通过运算,只需要+0即可

3.xss跨站脚本攻击

指恶意攻击向web页面插入html、js标签导致页面出现错误

解决方案

转义标签” ”即可,有以下php函数可解决

htmlspecialchars 函数 和 htmlentites函数

eag:

function deepslashes($data){

#判断$data的表现形式 并且需要处理空的情况

if(empty($data)){

return($data);

}

return is_array($data) ? array_map(‘deepslashes’,$data) : htmlspecialchars ($data);

}

浅谈:在PHP中该怎样防止SQL注入

使用预处理语句和参数化查询。

禁止使用拼接sql语句,和参数类型验证,就可以完全避免sql注入漏洞!

预处理语句和参数分别发送到数据库服务器进行解析,参数将会被当作普通字符处理。这种方式使得攻击者无法注入恶意的SQL。 你有两种选择来实现该方法:

1、使用PDO:

$stmt=$pdo-prepare(‘SELECT * FROM employees WHERE name = :name’);

$stmt-execute(array(‘name’=$name));

foreach($stmtas$row) {

// do something with $row

}

2、使用mysqli:

$stmt = $dbConnection-prepare(‘SELECT * FROM employees WHERE name = ?’);

$stmt-bind_param(‘s’, $name);

$stmt-execute();

$result = $stmt-get_result();

while($row = $result-fetch_assoc()) {

// do something with $row

}

php如何防止sql注入

PHP防止sql注入是一个比较低级的问题了,这个问题其实在我大一上学期做第一个个人博客的时候就已经关注过了,不过简单的说一下关于PHP防注入的方式吧。

使用PDO防注入。

这是最简单直接的一种方式,当然低版本的PHP一般不支持PDO方式去操作,那么就只能采用其它方式。

采用escape函数过滤非法字符。

escape可以将非法字符比如 斜杠等非法字符转义,防止sql注入,这种方式简单粗暴,但是不太建议这么用。

自己手写过滤函数,手写一个php sql非法参数过滤函数来说还是比较简单的,但是你的函数需要非常的健壮,不让仍然有可能被非法黑客攻击;你的Coding水平直接决定了你的函数的健壮性。

各种框架里面其实都有对于非法字符过滤的支持,最简单的比如ThinkPHP,你可以直接防止注入。

写一个PHP扩展对于进入参数进行有选择的过滤。 开发一个PHP扩展是对于一个PHP高级程序员必备的技能,将你需要的功能打包在PHP扩展里面,就像黑词过滤一样进行检查,是非常方便的。一般都是用在自己写框架路由器转发的时候,如果你用扩展实现框架的路由器转发的话,可以顺便将参数过滤加入到PHP扩展里面,通过C去实现。

对于现在的防注入技术其实已经成熟了,对于一个站点该关心的不是防注入了,而是大规模高并发如何处理的问题,或者关于各种其他漏洞,比如现在世界上仍然有百分之80使用redis的站点存在redis漏洞,通过redis漏洞可以直接拿到机器的访问权限,一般来说都是直接给你种一个挖矿机器人来。

原创文章,作者:HHHY,如若转载,请注明出处:https://www.506064.com/n/131987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HHHYHHHY
上一篇 2024-10-03 23:49
下一篇 2024-10-03 23:49

相关推荐

  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • ArcGIS更改标注位置为中心的方法

    本篇文章将从多个方面详细阐述如何在ArcGIS中更改标注位置为中心。让我们一步步来看。 一、禁止标注智能调整 在ArcMap中设置标注智能调整可以自动将标注位置调整到最佳显示位置。…

    编程 2025-04-29
  • 解决.net 6.0运行闪退的方法

    如果你正在使用.net 6.0开发应用程序,可能会遇到程序闪退的情况。这篇文章将从多个方面为你解决这个问题。 一、代码问题 代码问题是导致.net 6.0程序闪退的主要原因之一。首…

    编程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Python创建分配内存的方法

    在python中,我们常常需要创建并分配内存来存储数据。不同的类型和数据结构可能需要不同的方法来分配内存。本文将从多个方面介绍Python创建分配内存的方法,包括列表、元组、字典、…

    编程 2025-04-29
  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • 用不同的方法求素数

    素数是指只能被1和自身整除的正整数,如2、3、5、7、11、13等。素数在密码学、计算机科学、数学、物理等领域都有着广泛的应用。本文将介绍几种常见的求素数的方法,包括暴力枚举法、埃…

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • Python通配符有哪些

    Python通配符是一种表示字符串中模糊匹配的有效工具,用于匹配与具有特定模式匹配的字符串。Python中主要的通配符有:*,?,[]和{}。 一、星号通配符 * 在Python中…

    编程 2025-04-29

发表回复

登录后才能评论