这是我的计算机安全类的任务的一部分,所以我不是在寻找具体的答案,只是一些帮助.
我们得到了一个错误的程序(在php中)来控制一个sql数据库(一个银行帐户),我们必须找到一种方法来创建一个SQL注入攻击,让我们在不知道它的ID的情况下登录到一个帐户.
我很确定我知道漏洞在哪里,但我似乎无法让我的攻击工作.
有问题的代码(它有点长,但唯一重要的部分是第一部分):
<html><head><title>FrobozzCo Community Credit Union</title></head>
<body>
<h1>FrobozzCo Community Credit Union</h1>
<h4><i>We're working for GUE</i></h4>
<hr>
<?php
$debugmode = 1;
function debug($msg) {
global $debugmode;
if ($debugmode) {
echo "<h4>$msg</h4>\n";
}
}
$thispage = 'FCCU.php';
echo "<form action='$thispage' method='post' name='theform'>\n";
$dbuser = 'fccu';
$dbpass = 'fccubucks';
$dbhost = 'localhost';
$dbname = $dbuser;
$PARAM = array_merge($_GET, $_POST);
// get username and password from form
if (!$PARAM['id'] || !$PARAM['password']) {
login();
} else { // otherwise, attempt to authenticate
$id …Run Code Online (Sandbox Code Playgroud) 我在我们公司的Intranet上创建了一个小型调查网页.无法从外部访问此网页.
表单只是几个单选按钮和一个注释框.
我想保持良好的编码实践,并希望防范SQL注入.
SQL注入是否可以在带有文本框注释的insert语句中发生?如果是这样,我如何使用.NET 2.0防范它?
在另一个问题中有评论说:
"当谈到数据库查询时,总是尝试使用准备好的参数化查询.mysqli和PDO库支持这一点.这比使用诸如mysql_real_escape_string之类的转义函数更安全."
所以,我想问的是:为什么准备参数化查询更安全?
我正在使用Magento的功能来插入和更新查询.我的要求是在进行这些类型的查询时我想要处理SQL注入.但我无法找到Magento是如何做到这一点的.我正在提供一个开始样本.请给我一个完整的例子.
<?php
$write = Mage::getSingleton("core/resource")->getConnection("core_write");
$sql = "INSERT INTO Mage_Example (Name, Email, Company, Description, Status, Date)
VALUES ('$name', '$email', '$company', '$desc', '0', NOW())";
?>
Run Code Online (Sandbox Code Playgroud)
现在我想更改上面的查询以防止可能的SQL注入.我不想使用mysql_real_escape_string()PHP 的默认" "内置函数.任何人都可以使用" $write"DB Handler 为我提供一个有用的解决方案.
任何帮助是极大的赞赏.
我需要保护应用程序免受SQL注入.应用程序使用ADO连接到Oracle,并搜索用户名和密码以进行身份验证.
从我读到现在开始,最好的方法是使用参数,而不是将整个SQL分配为字符串.像这样的东西:
query.SQL.Text := 'select * from table_name where name=:Name and id=:ID';
query.Prepare;
query.ParamByName( 'Name' ).AsString := name;
query.ParamByName( 'ID' ).AsInteger := id;
query.Open;
Run Code Online (Sandbox Code Playgroud)
另外,我正在考虑验证来自用户的输入,并删除删除,插入,选择等SQL关键字......任何不同于普通ASCII字母和数字的输入字符都将被删除.
这样可以保证我的安全级别最低?
我不想使用除Delphi 7标准和Jedi之外的任何其他组件.
Spring的JdbcTemplate抽象提供了许多功能,但它是否可以以提供SQL注入攻击保护的方式使用?
例如,就像使用PreparedStatement并使用正确定义的参数化获得的保护类型一样.
我正在开发一个Web应用程序.就像一个合适的人一样,我过去常常使用像Joomla这样的东西制作出令人敬畏的东西,但现在终于弄脏了PHP,MySQL和CodeIgniter.
当您制作可以处理大量数据的严肃网页应用时,我应该采取哪些预防措施来对付我的数据输入以完全消毒它?我知道有明显的修剪,逃逸,xss清洁等 - 但我应该采用什么其他技术来停止注入数据库?
不仅如此,还有任何非破坏性的数据库注入代码,我可以测试我的所有输入吗?就像在,它会注入一些可见的东西,但实际上对我的测试数据库没有任何伤害?我不是一个黑客,需要一点指导.
黑客使用什么其他常见方法来破坏或读取用户的数据,我如何自己检查?我没有钱雇用一名安全顾问,因为我只有16岁,但对计算机有很好的经验,如果给出一些关于它们的提示,我相信我可以做一些技巧.
我知道这是一大堆问题但总结一下,你做了什么来确保一切都是100%安全的?
基本上,我想要做的是:
mysql_query("SELECT ... FROM ... ORDER BY $_GET[order]")
Run Code Online (Sandbox Code Playgroud)
他们显然可以通过在其中放置无意义来轻松地创建SQL错误,但mysql_query只允许执行1个查询,因此他们不能放置类似的东西1; DROP TABLE ....
除了创建语法错误之外,恶意用户是否可以做任何损害?
如果是这样,我该如何清理查询?
在$_GET['order']变量中有很多逻辑构建在类似SQL的语法中,所以我真的不想改变格式.
澄清$_GET['order']一下,不只是单个字段/列.它可能是这样的last_name DESC, first_name ASC.
我正在使用hibernate开发一个应用程序.当我尝试创建一个登录页面时,出现了Sql Injection的问题.我有以下代码:
@Component
@Transactional(propagation = Propagation.SUPPORTS)
public class LoginInfoDAOImpl implements LoginInfoDAO{
@Autowired
private SessionFactory sessionFactory;
@Override
public LoginInfo getLoginInfo(String userName,String password){
List<LoginInfo> loginList = sessionFactory.getCurrentSession().createQuery("from LoginInfo where userName='"+userName+"' and password='"+password+"'").list();
if(loginList!=null )
return loginList.get(0);
else return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何防止Sql注入?loginInfo表的create table语法如下:
create table login_info
(user_name varchar(16) not null primary key,
pass_word varchar(16) not null);
Run Code Online (Sandbox Code Playgroud)