php怎么防止sql注入

方法一:mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 !

方法二:打开magic_quotes_gpc来防止SQL注入。php。ini中有一个设置:magic_quotes_gpc = Off这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ‘ 转为 ‘等,对于防止sql注射有重大作用。

如果magic_quotes_gpc=Off,则使用addslashes()函数。

如下:$sql = “select count(*) as ctr from users where username='”。mysql_real_escape_string($username)。”‘ andpassword='”。 mysql_real_escape_string($pw)。”‘ limit 1”;

方法三:自定义函数/*** 防止sql注入自定义方法一* author: xiaochuan* @param: mixed $value 参数值*/function check_param($value=null) {# select|insert|update|delete|’|/*|*|。。/|。/|union|into|load_file|outfile$str = ‘select|insert|and|or|update|delete|’|/*|*|。。/|。/|union|into|load_file|outfile’;if(!$value) {exit(‘没有参数!’);}elseif(eregi($str, $value)) {exit(‘参数非法!’);}return true;}/*** 防止sql注入自定义方法二* author: xiaochuan* @param: mixed $value 参数值*/function str_check( $value ) {if(!get_magic_quotes_gpc()) {// 进行过滤$value = addslashes($value);}$value = str_replace(“_”, “_”, $value);$value = str_replace(“%”, “%”, $value);return $value;}/*** 防止sql注入自定义方法三* author: xiaochuan* @param: mixed $value 参数值*/function post_check($value) {if(!get_magic_quotes_gpc()) {// 进行过滤$value = addslashes($value);}$value = str_replace(“_”, “_”, $value);$value = str_replace(“%”, “%”, $value);$value = nl2br($value);$value = htmlspecialchars($value);return $value;}

防止注册表注入式攻击,防止DLL注入的方法

由于Users组用户无法写入注册表,因此我们可以创建一个Users组的用户来登录使用。在电脑桌面找到计算机,在其上方点击右键,在弹出的菜单中点击管理。

在服务器管理器窗口左侧依次点击展开配置—本地用户和组,然后选中其下的用户。

在右侧窗口空白处点击右键,在弹出的菜单中点击新用户。

在新用户窗口下方取消勾选用户下次登录时须更改密码,勾选密码永不过期,然后根据规划输入用户名和密码,点击创建。

然后在左侧菜单中选中组,在右侧找到并双击打开Users组,发现新建的这个用户已经加入Users组了,这样就省下了下面的操作。

如果不在Users组里面,点击添加,在选择用户窗口左下方点击高级。

点击立刻查找,在下方搜索结果中找到并选中刚刚新建的用户,然后依次点击确定返回即可,这样也能把用户加入Users组,再把该用户分配使用即可,这样凡是通过Users组的用户登录的系统均无法写入注册表,有效的防止了注册表注入式攻击。

百度大势至电脑文件防泄密系统,在其官网下载,下载完成后解压,在解压的文件中找到大势至电脑文件防泄密系统V14。2。exe安装文件,双击开始安装。

安装根据窗口的提示进行即可,直至安装完成,使用快捷键alt+F2唤出登录框,根据登录窗口下方提示输入初始账号和密码,点击确定登录。

在主界面右侧窗口中找到操作系统控制分类,然后在其下方找到并勾选禁用注册表即可,这样就可以防止注册表注入式攻击,防止DLL注入,是不是很简单。

初此之外,建议勾选禁用设备管理器、禁用组策略、禁用计算机管理、禁用任务管理器、禁用DOS命令,这些不影响电脑的正常使用,还能最大程度保护计算机的安全。

另外设置虽然简单,但是建议把初始登录密码修改掉,防止其他人篡改设置。在主界面右侧窗口下方找到设置,点击其下的登录用户设置。

双击admin用户,在弹出的窗口中根据提示输入新的密码,然后依次点击确定返回主界面即可,这样密码就修改完成了。

设置完成后在右下角找到并点击后台运行,系统自动隐藏到windows后台托管运行,开机即可自动启动。

MySQL报错注入的原理

sqli-labs https://jingyan。baidu。com/article/67662997a0527d54d51b84df。html正常用户访问服务器发送id信息返回正确的id数据。报错注入是想办法构造语句,让错误信息中可以显示数据库的内容;如果能让错误信息中返回数据库中的内容,即实现SQL注入。

常见floor()报错注入方法:Example select count(*) from infomation_schema。tables group by concat((select user()),floor(rand(0)*2);打开MySQL命令框输入命令查看报错信息。

extractvalue()报错注入方法:select extractvalue(1,concat(0x7e,(select user()),0x7e));extractvalue()接收两个参数,第一个XML文档,第二个xpath语句。xpath语句格式错误返回数据。MySQL命令行中测试查看。

updatexml()报错注入方法:select updatexml(1,concat(0x7e,(select user()),0x7e,1);查询出所有库以及security中所有表的信息。

进行手工注入的过程中可以使用burp suite工具配合使用,快速的获取需要的数据。

concat:连接字符串功能 floor:取float的整数值。rand:取0~1之间随机浮点值 group by:根据一个或多个列对结果进行分组并排序功能。该经验仅为学习交流。

MySQL union查询注入

sqli-labs https://jingyan。baidu。com/article/67662997a0527d54d51b84df。html火狐浏览器/HackBar首先打开搭建好的sqli-labs,打开sqli-labs的第一关,进行union查询注入,sqli-labs搭建可查看工具。如图为第一关的Web界面。

首先使用order by确定列数,order by是数据库列进行排序,在hackbar中使用order by二分法进行注入测试发现 当order by 4进行第四列排序时提示未发现第四列,由此我们确定列数为3。

观察页面返回,选取可以显示数据的位置,进行下一步注入;将id=不存在的值,让页面可以返回union select 1,2,3设定的函数显示在页面中。

读取库的信息,确定可注入点,根据上个经验文档手工注入查询语法进行查看所有库的信息。上面页面显示可注入显示为2,3的位置,随便选择一个进行替换语法注入如下图获取所有库的信息,页面返回提示大于1的数据。

可以使用limit语法进行查询所有库的信息,这里使用group_concart将所有的库信息返回为一条语句输出,如下图查询到数据库中所有的库。

读取表的信息,选择security库使用语法进行所有表的信息,这里我们也是用group_concat()显示。如下显示出security库中所有的表信息。

读取表中的字段,我们选择users表进行查询,如下图:读取出users所有列的字段信息。

读取表中的数据,选择其中username,password的值进行查看。

union内部的select语句必须拥有相同数量的列。列也必须拥有相似的数据类型,每条select语句中的列的顺序必须相同。查看重复的值使用union all。

MySQL手工注入查询语法

phpstudy https://jingyan。baidu。com/article/a3f121e4879a86fc9052bb05。html首先我们先下载phpstudy安装,打开MySQL命令行模式,默认用户名密码为root/root。详细安装可查看工具。

查询数据库中所有的库的信息,语法:select schema_name from information_schema。schemata;

查询某个库中的所有表名,Example:查询security库中的表名,select table_name from information_schema。tables where table_schema=’security’;查询security库中的所有表如下图。

查询某个表中的某列数据,Example:select column_name from information_schema。columns where table_name=’users’;查询users的多有列如下图。

获取表格中的数据,语法select 列名 from 库名。表名 Example:获取users中username及password的数据:select username,password from security。users;

查询库名或表名等需要加引号,也可将查询目标更改为16进制数值进行查询。查询数据过程中多个列名可以使用逗号隔开进行多列数据查询。