我有一个令人困惑的问题,我似乎无法理解......我希望有人能指出我正确的方向......
我有两个SQL语句: - 第一个将表单中的信息输入数据库. - 第二个从上面输入的数据库中获取数据,发送电子邮件,然后记录交易的详细信息
问题是看起来单引号只在第二个条目上触发MySQL错误!第一个实例没有问题,但第二个实例触发了mysql_error().
表单中的数据是否与表单中捕获的数据处理不同?
查询#1 - 这没有问题(并且没有转义单引号)
$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$special_instructions', '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d …Run Code Online (Sandbox Code Playgroud) 例如:
select * from tablename where fields like "%string "hi" %";
Run Code Online (Sandbox Code Playgroud)
错误:
您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第1行的'hi""'附近使用正确的语法
如何构建此查询?
根据PHP手册,为了使代码更具可移植性,他们建议使用以下内容来转义数据:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
Run Code Online (Sandbox Code Playgroud)
我还将进行其他验证检查,但上述严格来说,在逃避数据方面有多安全?我还看到在PHP 6中将不推荐使用魔术引号.这将如何影响上述代码?我宁愿不依赖于像mysql_real_escape_string()这样的特定于数据库的转义函数.
我只是有一个网站来管理,但我不太确定前一个人写的代码.我正在粘贴下面的登录程序,您能看看并告诉我是否存在任何安全漏洞?乍一看,似乎可以通过SQL注入或操纵cookie和?m =参数进入.
define ( 'CURRENT_TIME', time ()); / / Current time. define ( 'ONLINE_TIME_MIN', (CURRENT_TIME - BOTNET_TIMEOUT)); / / Minimum time for the status of "Online". define ( 'DEFAULT_LANGUAGE', 'en'); / / Default language. define ( 'THEME_PATH', 'theme'); / / folder for the theme. / / HTTP requests. define ( 'QUERY_SCRIPT', basename ($ _SERVER [ 'PHP_SELF'])); define ( 'QUERY_SCRIPT_HTML', QUERY_SCRIPT); define ( 'QUERY_VAR_MODULE', 'm'); / / variable contains the current module. define ( 'QUERY_STRING_BLANK', QUERY_SCRIPT. '? m ='); / / …
我一直在评论关于PHP的addslashes函数如何/为什么容易受到sql注入攻击的文章.我读过的所有内容都说特定的mysql编码类型存在问题(default-character-set = GBK),或者如果启用magic_quotes则存在问题.但是,在这种情况下,我无法摆脱addslashes()函数并执行恶意操作 - 例如以管理员身份登录.
$user = addslashes($_POST['user']);
$pass = sha1($_POST['pass']);
$sql = "SELECT * FROM admins WHERE user = '".$user."' AND `pass` = '".$pass."'";
$nums = mysql_num_rows(mysql_query($sql));
if($nums==1){
$_SESSION['admin_user'] = $user;
$_SESSION['admin_pass'] = $pass;
Run Code Online (Sandbox Code Playgroud)
这是对客户的(次要)安全审核,我会建议他们使用PDO,但我需要显示他们当前的漏洞.
参考文献:
我正在尝试验证在脚本上使用addslashes是否可被利用,众所周知,不应该使用addslashes,但是问题是,它总是可被利用吗?
我发现了大量关于在字符集不是 utf8(使用双字节转换)以及变量被“”括起来的两种情况下滥用 addslashes 的信息
那么,当上述情况都没有发生时,是否可以绕过addslashes?这是我一直在测试的代码:
带有数据库转储的 data.sql 文件:
CREATE TABLE IF NOT EXISTS `test` (
`user` varchar(25) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `test` (`user`) VALUES
('admin'),
('user');
mysql -u test -ptestpw test < data.sql
Run Code Online (Sandbox Code Playgroud)
index.php 放置在服务器中
<?php
//Server script the receives content via post
mysql_connect("localhost","test","testpw");
mysql_select_db("test");
$user=addslashes($_POST['username']);
$query="SELECT * FROM test WHERE user='".$user."'";
$q=mysql_query($query) or die (mysql_error());
$num_rows = mysql_num_rows($q);
echo "Listed rows: $num_rows";
if ($num_rows > 0) {
$a=mysql_fetch_array($q);
print_r($a);
}
?> …Run Code Online (Sandbox Code Playgroud) 可能重复:
在PHP中停止SQL注入的最佳方法
我想知道最好用哪些函数来防止MySQL注入
我可以使用一些函数来阻止sql注入,例如:
mysql_real_escape_stringmysqli_real_escape_stringaddslasheshtmlentities 同 ENT_QUOTES'或"我想使用最好和更快的反SQL注入方法来标准化我的代码,我想知道我应该为高流量站点使用哪一个.
我们正在尝试从字符串中转义一些特殊字符,请告诉我我们必须使用的函数\ne.g。HTC Desire 210 \xe2\x80\x93 白色
\n在此示例中,我们转义 -(连字符)特殊字符。\n在上面的示例中,我们有很多具有不同特殊字符的产品名称,我们对其进行转义。\n感谢您的合作。
php ×7
mysql ×4
security ×3
addslashes ×2
arrays ×1
cryptography ×1
escaping ×1
hash ×1
insert ×1
magic-quotes ×1