我最近继承了一个经典的asp网站,其中包含大量内联SQL插入语句,这些语句易受SQL注入攻击.
这些insert语句通过ADO命令对象执行.
将ADO Command Object的Prepared属性设置为true可确保在执行前对参数进行参数化,从而降低SQL注入的风险吗?
我有以下代码:
public function checkLoginDetails($email, $password) {
$select = $this->select ();
$select->where ( "password=?", md5($password) );
$select->where ( "email=?", $email );
return $this->fetchRow($select);
}
Run Code Online (Sandbox Code Playgroud)
电子邮件和密码直接来自用户.我是否需要使用mysql_real_escape_string过滤电子邮件,或者Zend DB是否为我做了?
谢谢!
我的同事对他的代码不安全,并允许用户上传要在服务器上运行的SQL文件.他删除了文件中的任何关键词,如"EXEC", "DROP", "UPDATE", "INSERT", "TRUNC"
我想通过利用他的方式向他展示他的方式的错误 EXEC ( @sql )
我的第一次尝试将是 'EXEXECEC (N''SELECT ''You DRDROPOPped the ball Bob!'')'
但他可能会在循环中过滤掉所有内容.
有没有办法可以利用我的同事的代码?或者过滤掉关键词?
编辑:我让他检查他的代码.如果代码包含关键字,则不执行它.我还在试图弄清楚如何使用二进制转换来利用它.
我可以通过使用参数来避免所有SQL注入攻击吗?
在这种情况下,不要担心SQL注入中的任何内容?
或者是否有某些类型的攻击需要程序员更多的关注?
我们都知道,制作一个没有一两个缺陷的大型网站几乎是不可能的.因此,我编写了一个小型监视器,用于检查Apache访问日志是否存在潜在的SQL注入攻击(以及其他内容),并且它运行良好.每当有人尝试攻击时我都会收到警报,而且我的误报很少,以至于默认操作现在将它们转储到iptables下拉列表中.它甚至帮助我识别了一些(非安全性)错误并将其删除.
这是我的规则(不区分大小写):
PathInjection = \./\.\./(bin|boot|data|dev|etc|home|lib|lib64|media|mnt|opt|proc|root|sbin|selinux|srv|sys|tmp|usr|var)/
Havij = 0x31303235343830303536
r3dm0v3 = 0x7233646D3076335F68766A5F696E6A656374696F6E
LogicBypass = '.*?(\bor|\band|\bxor|\|\||\&\&).*?--
UnionSelect = union[^a-z-_]+((all|distinct)[^a-z-_]+)?select[^a-z-_]
Run Code Online (Sandbox Code Playgroud)
我想知道的是,您如何绕过这些检查并仍能产生有效注射?你能想出一种在不引入误报的情况下改进它们的方法吗?
几点说明:
编辑:
好的,所以人们似乎误解了我的意图.这可能是我的错,因为我没有完全解释.这被要求作为监控产品的附加功能,旨在提供最低限度的安全监控.作为我们与客户和文档对话的一部分,我们强调这不是一个包罗万象,也不是适当的安全基础设施(例如IDS和防火墙)的替代品.它只是一种信息服务,可帮助提供基本威胁检测并生成有关潜在攻击数量的统计信息.我不是想写一个IDS或防火墙.如果由我决定,我会退出该功能并告诉他们使用自己的监控系统安装一整套安全基础设施,但这不是我的号召.目前的情况是我一直在自己的网站上测试系统.现在,我只是想找到一种方法来改进正则表达式字符串,使其更有效.希望这可以解决一些问题.
我没有在Django的表单代码中看到任何形式的输入清理w/r/t处理原始文本.Django如何确保在进入数据库时清理用户输入?这样做是为了防止SQL注入等吗?
显然$ data是字符串,我们正在删除满足reg表达式的字符,但是/ [|| FF0-\xF7] ... /?指定了哪些字符?
preg_replace('/[\xF0-\xF7].../', '', $data)
Run Code Online (Sandbox Code Playgroud)
这些角色被替换的意义又是什么?
编辑赏金:具体来说,这试图防止发生什么漏洞?这些数据后来用于mysql查询(非pdo),所以我认为某些注入攻击可能与这些字符有关?或不?我试图在我正在阅读的脚本中理解这行代码背后的逻辑.
当我使用WordPress内置函数时
add_post_meta, update_post_meta, add_user_meta, update_user_meta
wp_insert_post, wp_insert_user
在将用户输入数据传递给这些函数之前,我应该进行任何转义或清理吗?或者这些函数本身可以解决问题吗?
这里在codex中Action_Reference/save_post将数据传递到update_post_meta右边$_POST.
我读过关于 SQL 注入的内容,所以我在我的网站上进行了尝试,当然它奏效了。我们正在连接到数据库。所以这是我登录页面的 PHP 代码的一部分:
$userName = $_POST["username"];
$userPass = $_POST["password"];
$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";
$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)
$row = mysqli_fetch_array($result);
if(!$row){
echo "No existing user or wrong password.";
}
Run Code Online (Sandbox Code Playgroud)
我一直在寻找解决方案很长时间,但我无法弄清楚如何以参数化的方式使其工作。你能帮我完成我的代码以防止 SQL 注入吗?
我第一次将 Sequelize 与 PostgreSQL 结合使用。这也是我很长时间以来第一次使用 SQL 数据库。
我一直在研究如何提高一些 SQL 查询的性能和安全性。我发现了这个sequelize.query()方法并开始将其用于此目的。
这种在 Sequelize 中进行原始查询的方式是否容易受到 SQL 注入攻击?
sql-injection ×10
php ×3
security ×3
sql ×3
mysql ×2
regex ×2
asp-classic ×1
django ×1
dynamic-sql ×1
login-page ×1
node.js ×1
postgresql ×1
python ×1
sequelize.js ×1
sql-server ×1
t-sql ×1
utf-8 ×1
validation ×1
wordpress ×1
xss ×1
zend-db ×1