我有一个访问者可以输入数据的表单,我想通过$ _POST变量将这些数据存储在mysql数据库中.我需要什么来阻止SQL注入?
这可能听起来像一个奇怪的问题,但有没有我可以下载一个易受sql注入的网站的网站类型没有登录旁路?
我正在制作一个漏洞扫描程序,我想学习一些SQLi,所以我可以将它包含在我的项目中.
谢谢,它不需要花哨.足以练习.
我正在写一个ASP(经典)Javascript的快速网站.
我正在使用带参数的预准备语句.没什么特别的.
我的问题是我是否需要清理参数的输入(如果是这样,是否有像PHP这样的本机函数?),或者我使用参数而不是连接内联SQL这一事实让我安全吗?
//Set up the command to run the GetMigrationDate stored procedure.
var command = new ActiveXObject("ADODB.Command");
command.CommandText = "exec myStoredProc ?";
//Set up parameters
command.Parameters.Append(command.CreateParameter("name", 200, 1, 255));
command.Parameters("name") = name;
//Set up result recordset
var results = new ActiveXObject("ADODB.Recordset");
//Run command
results.open(command);
Run Code Online (Sandbox Code Playgroud)
[编辑]存储过程是这样的:
@name varchar(255)
select * from customers where name = @name
Run Code Online (Sandbox Code Playgroud) 当从获取/发布信息并将信息保存到数据库时,今天的最佳实践是什么?数据是否仍然像过去那样被转义,或者是否有其他做法?此外,HTMLPurifier在哪里可以适应?我目前正在使用它来过滤富文本.
目前我根本不允许使用撇号(以及你可以看到的其他角色),对每个字段重复:
foreach(char c in Comments)
{
if(c=='\'' || c=='$' || c=='\"' || c=='&' || c=='%' || c=='@' || c=='-' || c=='<' || c=='>')
{
errorMessage = "You have entered at least one invalid character in the \"Comments\" field. Invalid characters are: [\'], [\"], [&], [$], [@], [-], [<], [>], and [%]";
}
}
Run Code Online (Sandbox Code Playgroud)
我已经编写了一段时间,我正在变得更好,但真正的问题是,虽然我确信有一种方法可以有效地"剥离"或以其他方式验证用户输入,但我不确定方法是最好的,可能直到安全危机迫在眉睫.
如果必须的话,我会决定永远不会允许单引号进入表格(就像现在一样),但是这可能会加剧任何名字的人... Bill O'Reilly的名字字段等等.
可能还有其他(我不知道该怎么称呼它们,'插件?''在程序之外?')可以为我做这个工作,但这实际上是无用的,因为我不仅不知道如何为了整合它,我不知道如何专门定制它到我的Web界面/数据库.
是否有任何代码可以帮助我从正常的撇号中检测sql注入撇号(通过它周围的字符?)?请记住,我的一些字段最多可容纳500个字符(textareas),最多可容纳1,000个字符.
感谢您的任何想法或帮助!
此存储过程将检查用户名和密码,1如果凭据匹配则返回0.
CREATE PROCEDURE usp_CheckPermisssions
@UserName NVARCHAR(50),
@Password NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS( SELECT 1 FROM dbo.Users WHERE Username=@username and Password=@password)
RETURN 1
ELSE
RETURN 0
END
GO
Run Code Online (Sandbox Code Playgroud)
这只是一个示例存储过程.我只是想学习SQL注入技术,以防止我的代码被注入.
假设输入未在前端消毒.
我知道如果我在存储过程中使用动态查询或在前端定义查询,那么SQL注入技术将起作用.
不是:输入将通过前端传递.
换句话说我的问题
任何人都可以对此查询进行注射吗?如果有,怎么样?
我在日志中发现有人试图攻击我的页面.我有一些子页面,通过URL提交的ID从数据库中提取数据.喜欢page.php?id = 666我在日志中可以找到的是这些攻击:
page.php?id=../../../../../../../../../../etc/passwd
page.php?id=/proc/self/environ
page.php?id=-1%27
Run Code Online (Sandbox Code Playgroud)
更重要的是,我的代码是否很弱?这次攻击可能成功吗?
$id = intval($_GET['id']);
$stmt = $con->prepare("SELECT *
FROM mytable AS myvar
WHERE myvar.ID =:ID");
$stmt->bindValue(':ID', $id, PDO::PARAM_INT);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我知道保护您的网站免受SQL注入的最安全方法是使用Prepared Statements.但是,如果用户输入转换为数字,有人可以解决这个问题?
$id = (int)$_GET['id'];
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以使用多个单词的搜索栏,但我担心SQL注入.
我使用节点快递与故宫MSSQL包.
这是获取条件的代码,生成SQL并运行它:
router
.get('/search/:criteria', function (req, res) {
var criteria = req.params.criteria;
var words = criteria.split(" ");
var x = ""
words.map(word => x += `name like '%${word}%' and `);
x = x.substring(0, x.length - 5); // Remove trailing 'and'
var query = `SELECT * FROM table WHERE ${x}`
new sql.ConnectionPool(db).connect().then(pool => {
return pool.request().query(query)
}).then(result => {
})
});
Run Code Online (Sandbox Code Playgroud)
搜索something to search将导致此查询:
SELECT * FROM table
WHERE
name like '%something%'
and name …Run Code Online (Sandbox Code Playgroud) sql-injection ×10
sql ×5
php ×4
mysql ×3
security ×3
.net ×1
.net-4.0 ×1
c# ×1
data-access ×1
express ×1
node.js ×1
parameters ×1
razor ×1
sql-server ×1
webmatrix ×1