❶ 一上,为什么说Mysql预处理可以防止SQL注入
简单点理解:prepareStatement会形成参数化的查询,例如:
1
select * from A where tablename.id = ?
传入参数'1;select * from B'如果不经过prepareStatement,会形成下面语句:
1
select * from A where tablename.id = 1;select * from B
这样等于两次执行,但如果经过预处理,会是这样:
1
select * from A where tablename.id = '1;select * from B'
'1;select * from B'只是一个参数,不会改变原来的语法
❷ 什么样的mysql语句可以防止sql注入漏洞
不是在mysql端防止,而是在拼sql语句的时候对条件参数进行过滤可疑关键字,例如:'
;
or
=
之类的。
❸ 在MySQL里如何识别并且避免发生SQL注入风险
过滤一些常见的数据库操作关键字,
select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤
php配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值
sql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号
提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中
对于常的方法加以封装,避免直接暴漏SQL语句
开启PHP安全模式safe_mode=on
打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"
控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志
使用MYSQLI或PDO预处理
❹ mysql的sql注入,为什么 or 1=1就执行了,不是作为前边条件的拼接字符串
一样是作为拼接字符串,不过因为id这个值没有做任何处理 直接做了一个拼接 所以才导致攻击者可以构造相应的sql语句来攻击
❺ mysql 被SQL注入 求解
使用软件在程序目录里面搜索杀软提示的木马链接,如果没有在程序页面里搜索到,那很有可能是服务器所在机房造ARP病毒,网页被劫持了。
❻ 什么是mysql注入
MySQL SQL 注入
SQL注入可能是目前互联网上存在的最丰富的编程缺陷。 这是未经授权的人可以访问各种关键和私人数据的漏洞。 SQL注入不是Web或数据库服务器中的缺陷,而是由于编程实践较差且缺乏经验而导致的。 它是从远程位置执行的最致命和最容易的攻击之一。
我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。
以下实例中,输入的用户名必须为字母、数字及下划线的组合,且用户名长度为 8 到 20 个字符之间:
以上的注入语句中,我们没有对 $name 的变量进行过滤,$name 中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。
在PHP中的 mysqli_query() 是不允许执行多个 SQL 语句的,但是在 SQLite 和 PostgreSQL 是可以同时执行多条SQL语句的,所以我们对这些用户的数据需要进行严格的验证。
防止SQL注入,我们需要注意以下几个要点:
永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双”-“进行转换等。
永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
教程来源:树懒学堂_一站式数据知识学习平台_MySQK 防止SQL注入
❼ 关于SQL注入,到底是怎么的
简单来说, 你要在意的, 就是会 "写入" 数据库的东西, 而问题会出错在那呢 ?
就是如果对方写入的 东西 能变成你 SQL statement 的一部份时, 你就中标了.
楼上就给了个很好的例子, 如果你写 php 的, 建议你要认真详细地看看这几道指令:
addslashes()
mysqli_real_escape_string()
pg_escape_string()
get_magic_quotes_gpc()
另外, 说起 injection, 我也想起 xss, 如果对方写给你的东西能变成你页面的一部份,
那你也同样能中标, 不过效果是, 你的网站可以被骑劫或者洩露 cookies , 这样的时候,
也建议你看看
htmlentities()
❽ Mysql数据库拼接且防注入
<?php
//------show_xml.php------
error_reporting(E_ALL ^ E_NOTICE);
include_once("../include/mysql.class.php"); //数据库类
include_once("../config/config.php"); //数据库连接配置文件
header("Content-type:text/xml"); print("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
$db = new mysql(); //connect MYSQL
$query="select * from a order by id asc";
$result=$db->query($query);
while ($row = $db->fetch_array($result))
{
print("<document_info><source id='".$row[id]."'>".$row[name]."</source></document_info><content><title>".$row[num]."</title></content>");
}
$db->close();
?>
❾ 关于SQL注入。
我还没进公司时,网站平均15天被注入一次,我进公司以后,大力整改,至今3个月,未见被注入。
我告诉你我的方法。
总结起来就是:关键词屏蔽或替换 + 参数法sql。
1.封装一个类,用来将传入的参数进行关键词的屏蔽和替换(像ID之类的参数,可以屏蔽关键词的就完全屏蔽,像textarea这样不能完全屏蔽的,就把关键词替换,如将半角的'替换成全角’。还要限制参数的字数(很重要)
2.将所有需要和数据库打交道的地方全部进行参数化sql。
如将sql="select * from table where id='"+value+"'"
改sql="select * from table where id=@id"
写一个类,里面专门存放参数法sql的各种方法,虽然会麻烦一些,但是非常非常有效,可以杜绝绝大多数sql注入。
这样,双管其下,基本可以防止sql注入了
❿ 用最简单的方法讲解什么是SQL注入
一个数据库一般都包含有若干张表,如同我们前面暴出的数据库中admin表包含有管理员信息,而user表则包含有所有的论坛用户信息一样。以下面这张表为例:
Dv_User
UserID UserName UserPassword UserEmail UserPost
1 admin 469e80d32c0559f8 [email protected] 0
2 Test 965eb72c92a549dd [email protected] 0
这是DVBBS 7.0的数据库中所有用户资料的表,Dv_User 是表名。每一行代表一个用户,每一列是该用户的某种属性。我们最感兴趣的自然是用户名与密码这样的属性了。
SQL是一种用于操作数据库的规范化语言,不同的数据库(MSSQL、MYSQL、ORACLE……)大体上都是一样的。比如我们要查询数据库中的信息:
select UserName,UserPassword from Dv_User where UserID=1;
这就是一个最典型的SQL查询语句,它的意思是,在Dv_User这张表中,将UserID为1的用户名与密码查询出来。
得到的结果是:admin 469e80d32c0559f8
SELECT语句语法:
SELECT [列名],[列名2]…… FROM [表名] WHERE [限制条件]
例:
SELECT * FROM Dv_User where UserID=1
表示查询UserID为1的所有信息。
更新:
UPDATE [表名] SET [列名]=新值 WHERE [限制条件]
例:
UPDATE Dv_User set [UserPassword]=’ 965eb72c92a549dd’ WHERE UserName=’admin’
此语句将把Dv_User表中的UserName为admin的那一行中UserPassword的值改为965eb72c92a549dd。
删除:
DELETE FROM [表名] WHERE [限制条件]
例:
DELETE FROM Dv_User WHERE UserName=’test’
将用户名为test的那一行从Dv_User表中删除
二、SQL注射漏洞简述
SQL语法看很容易上手,那SQL漏洞是怎么来的呢?”
if id<>"" then
sql="SELECT * FROM [日记] WHERE id="&id
rs.Open sql,Conn,1
我们这段代码是提取自BBSXP论坛的,经过我改动以后,把它做成了一个有漏洞的页面给你讲述SQL漏洞的原理。”
那张日记的表内容如下:
日记
id username title content adddate
我们访问 localhost/bbsxp/blog.asp?id=1
的时候结果如图1。
“访问blog.asp的时候,我们提交的参数id为1,那么放到SQL语句里就变成了:
SELECT * FROM [日记] WHERE id=1
所以就得到我们看到的那个页面,这就是sql注入的成因。
1楼2010-07-17 09:52
举报 |
个人企业举报
垃圾信息举报
C级丶娱乐
正式会员
5
SQL漏洞的起源就从这里开始了!注意到了吗?id的值是由我们提交的