我想like在动态参数化查询中使用关键字.我想保护我的查询免受SQL注入,所以我不想传递值,而是我想在执行查询时传递我的标准,
有没有办法可以做到这一点?
SELECT
ComposeMail.ID,
ComposeMail.DateTime,
ComposeMail.Subject,
ComposeMail.CreatedBy,
ComposeMail.ReceiverStatus,
Users.Name,
ROW_NUMBER() OVER(ORDER BY '+ @p_SortExpression +') AS Indexing
FROM
ComposeMail
INNER JOIN
Users
ON
ComposeMail.CreatedBy = Users.ID
WHERE
(ToReceipientID=@p)
AND (
ReceiverStatus=3
OR ReceiverStatus=4
)
AND (
(Subject Like ''%' + @p3 + '%'')
OR (Body Like ''%' + @p3 + '%'')
OR (Name Like ''%' + @p3 + '%'')
)
Run Code Online (Sandbox Code Playgroud)
这是我的动态查询字符串.我不想在这里传递值.
可能重复:
在PHP中停止SQL注入的最佳方法
我已经看到一些使用称为PDO的东西来使sql-infection或其他使用real_escape的查询安全的例子,但它们似乎都是不完整的或承担一些知识.所以我问,采取这个简单的更新查询,并使其从sql-injection安全.
function updateUserName($id,$first,$last)
{
$qry = 'UPDATE user SET first = "'.$first.'", last = "'.$last.'" WHERE id = '.$id;
mysql_query($qry) or die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud) 这是正确的使用方式mysql_real_escape_string吗?我正在使用,$GET但是一位朋友告诉我用real_escape_string让它更安全:
$id = intval($_GET['id']);
$result = mysql_query("SELECT *
FROM products
WHERE id = $id") or die("err0r");
if(!$result) mysql_real_escape_string($id); {
Run Code Online (Sandbox Code Playgroud) 我不是某种hax0r左右,但我的老板有一个网站,我告诉他,它很容易受到SQL注入攻击.然后他回答说这不是危险,因为所有信息都是公开的; 所以我告诉他,有可能放弃桌子.
通常DROP表命令有效,有人可以告诉我为什么不在这种情况下?注意:这个数据库仅存储新闻,而不是重要信息!
news.php?id=-99%20union%20all%20select%201,2,3,4,5%20from%20information_schema.columns%20where%20table_schema=0x656e6469616d615--
Run Code Online (Sandbox Code Playgroud)
请不要回复hax0r-hate评论,如果我想知道如何破解我会在irc频道,而不是在这里.
编辑:如果他从数据库编辑安全,我认为他是对的.他可以透露sql查询,但这会失去向他展示危险的目的.
一次又一次我在Stackoverflow上读到我应该使用PDO来访问MySQL,因为它更安全.我最近使用一些在线教程将一些select和insert语句更改为PDO,并发现它们与我的原始代码非常相似.这让我觉得也许我错过了一些东西.
那么,我的问题是what makes PDO safer than normal mysql?有什么能让这些例子更安全吗?
编辑:我已粘贴下面的插入代码.如果您能看到一些让它更安全的方法,请告诉我.
include 'dataB3S3.php';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
/*** connect to DB ***/
/*** INSERT data ***/
$count = $dbh->exec("INSERT INTO $table(`instance` ,`uid`,`teid`) VALUES (NULL,'$userID','$teid')");
/*** display the id of the last Auto INSERT ***/
$lastInsertValue=$dbh->lastInsertId();
/*** close the database connection ***/
$dbh = null;
}
Run Code Online (Sandbox Code Playgroud) 在这样的声明中;
$sql = "SELECT distinct `term`,count(*) as count
FROM {$temp_table_name}
group by `term` order by count DESC";
Run Code Online (Sandbox Code Playgroud)
在字段名称'term'周围使用后退字符(`)给我买什么?出于性能原因,是否使用了后退?或者它是否适用于某种SQL注入保护?
注意:在我提交问题之后,我意识到反引号字符没有显示在字段名称'term'周围 - 就在stackoverflow上.我不知道如何让它出现在问题体中.
下面的代码是用php编写的:
$user = addslashes($_POST['user']);
$pwd = addslashes($_POST['pwd']);
$query = "SELECT * FROM userdata WHERE UserName='$user' AND Password=PASSWORD('$pwd')";
Run Code Online (Sandbox Code Playgroud)
然后将查询发送到mysql还有什么我需要处理的吗?
请指出.
基本问题.如果我有一个表格要求用户提供他们的姓名,电子邮件和评论,我将这些条目存储在数据库中...如果有人输入SQL查询会发生什么情况,例如:
DROP tablename
Run Code Online (Sandbox Code Playgroud)
在评论部分.
@Name,
@Email,
@Comments
INSERT INTO mytable (Name, Email, Comments) VALUES (@Name, @Email, @Comments)
Run Code Online (Sandbox Code Playgroud)
是否存在SQL注入的风险或者我是否完全安全?
SQL Server 2008存储过程来处理插入.
我一直在寻找我的Wordpress网站上的防御.不出所料,有关此主题的大量文档.两个更好的指南似乎在这里:
http://moz.com/blog/the-definitive-guide-to-wordpress-security
显然:http://codex.wordpress.org/Hardening_WordPress
我想加强我对SQL注入的防御,因为我以前的网站成为这种攻击的牺牲品,并证明几乎不可能再次清理.
从许多其他网站和类似指南上发表的评论来看,似乎有很多人不同意每一种实现这一目标的方式,因为它已经发誓.
我正在考虑将下面的内容(在第一个提到的网站上找到)添加到我的网站,但似乎没有谈论在编辑.htaccess文件的明显危险之外进行此类操作的危险.
通过添加此功能,我可以期望松散或妥协的功能,如果没有,为什么这种代码不包含在基本的Wordpress安装中?如果添加这种东西没有害处,为什么不是每次安装都包含它,并允许知道他们正在做什么的开发人员在必要时删除它?
## SQL Injection Block ##
<IfModule mod_rewrite.c>
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)||ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*("|'|<|>|\|{||).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* …Run Code Online (Sandbox Code Playgroud) 我需要允许用户在我的Web应用程序中输入SQL select语句; 这些select语句将用于在自定义下拉列表中生成选项.
所以我在UI上有一个用户输入选择的字段; 如何禁止用户输入插入/更新/删除?我可以检查第一个语句是否select可以在用分号分隔的UI上输入多个语句.