我正在实现一个Rails应用程序,用户可以在其中存储代码片段供以后参考.我打算使用Markdown进行文本输入,并且可能会使用wmd markdown编辑器.(Stackoverflow使用的那个.)
我有点担心人们在编辑框中输入代码的想法.根据我的理解,存在进入SQL的危险,这可能会搞砸我的数据库,或者输入稍后会运行的JavaScript并且会恶作剧.
通常,Rails具有防范此功能的功能,但我是否处于特殊情况,因为我的用户将被鼓励输入代码片段?
我应该注意哪些额外的预防措施?
我想知道你是否曾经在网站上使用SQL注入进行道德黑客攻击.
你用过什么技巧/技巧(尤其是mysql)?
我将数据提交到Grails中的控制器并进行了javascript注入.我很惊讶,因为我认为默认是在参数进入控制器时对其进行编码.我可以轻松设置它,以便所有参数在到达控制器时进行编码吗?另外,我可以安全地create使用文本进行GORM ,或者是否容易受到SQL注入攻击?我在指南中看到如何为find查询阻止SQL注入,但是对象创建呢?
我还看到有一种encodeAsHTML方法可以在返回客户端的路上调用编码.我不想在它进入数据库之前这样做,这样我只需编码一次吗?谢谢!
我正在尝试使以下形式的GET函数成为预定义变量的一部分.
有任何想法吗?提前致谢!
让我再解释一下我真正想要做的事情.我目前经营着一个专注于美国股市的网站.我用method = GET创建了一个HTML表单.此表单用作搜索框以查找股票代码符号.使用GET方法,它将股票代码放在URL的末尾,我创建了一个quotes.php页面,该页面捕获此信息并根据键入框中的股票代码显示股票图表.对于公司名称,我创建了一个名为company.php的页面,该页面声明了公司名称的所有变量(恰好是$后跟股票代码).文件company.php是quotes.php中包含的唯一文件.
这是它的来源:'.$$ _ GET ["symbol"]."
上面的代码根据在表单中输入的内容将GET更改为变量.如果有人在框中输入与company.php页面中的变量不匹配的内容,我使用"die"来显示错误消息.
我还在每个公司的company.php页面变量中添加了一些变量,这些变量将显示每个股票在哪个证券交易所上市.这些变量以"$ ex_"开头.所以,我试图做的是将符号键入"$ ex_"附加的框中,以便显示相应的证券交易所.
我的问题是:
谢谢你们!
我写了一个PHP脚本来处理用户登录.为了防止SQL注入攻击,我使用了'mysql_real_escape_string'函数.一切都很好,直到今天.我已经跟踪了代码并发现了问题; 使用'mysql_real_escape_string'的行.我已将其更改为以下基本命令:
$username=mysql_real_escape_string('sample');
var_dump($username)
Run Code Online (Sandbox Code Playgroud)
输出是:
bool(false)
Run Code Online (Sandbox Code Playgroud)
在我的本地Web服务器(WAMP)上一切正常,但在远程主机上出现问题!怎么了?(主机PHP是5.4.12)
在关注点分离方面,我想知道您对处理SQL注入攻击的问题是否是系统A或系统B的关注的看法,让我解释一下:
系统A - 您被要求实施Web界面,负责确定身份验证,这是确定用户是否存在且密码是否匹配.要执行此操作,您要告知,要确定用户是否存在且有效(密码验证),您必须调用Web服务(系统B).
因此,系统A只是一个接口HTML和JS,它将数据发送到服务器代码,例如PHP页面,然后从PHP页面接收输入并将其传递给Web服务,然后等待响应.
之后,您假设您可以与之通信,并且只获得一些统计数据.要记住用户,请使用cookie.
系统B - Web服务,不是你的责任,是一个以前开发的系统已经工作了很长时间,除了它的WSDL规范之外你对它一无所知.
稍后,一个安全团队,测试你的界面并说'嘿,你允许SQL注入,你的界面有问题,它应该清理输入,以防止SQL注入!!!'.
题 ?
所以,知道你了解情况,我问你们,在网络安全最佳实践和分离问题方面,如果系统A,对Web服务一无所知的接口/代理,强调持久性技术, SQL注入与否?!
如果有一些最好的做法与我的意见相矛盾,你能指点我吗?
我的看法
我的观点是,NO,在这种情况下,接口是责任委托者,并且旨在成为用户复杂规范(WSDL)和更简单的接口(Web页面)之间的代理,它不是用于此接口的Web服务和客户端之间的某种防火墙(客户端> Web服务器> Web服务).
假设
1)浏览器和Web服务器通信受SSL连接(HTTPS)保护.
2)建立WebServer和WebService之间的连接的网络被认为是可信网络,假设您在Web服务器网络(DMZ)和Web服务网络(特权网络)之间有某种防火墙.
3)Web服务当然只能在Web服务器的同一网络中访问.
4)任何人都可以与Web服务进行交谈,因为它不对您可以联系到他的机器执行任何类型的身份验证,尽管这不是系统A的关注,所以这只是让您知道,不需要想一想.
我想检查我的输入字符串是否有潜在的SQL注入.
这是我的类,方法和查询:
public class UserNamesQuery {
public static String getUserNames(Map<String, Object> params) {
String userNames = (String) params.get("userNames");
return "SELECT * FROM users WHERE name IN (" + userNames + ") ";
}
}
Run Code Online (Sandbox Code Playgroud)
是否有工具或快速方法来验证userNames没有SQL注入?
请注意,我使用的是Mybatis
基本上我在网上阅读了一些文章之后开始使用预备语句,这些文章说这是防止sql注入的简单方法.跳到我的场景,我有一个logExit函数,它将访问者来自我网站的页面和他离开我网站后的页面插入数据库.
public function logExit($url){
$HTTP_REFERER = ($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '');
$REMOTE_ADDR = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : '');
$params = array(
$REMOTE_ADDR,
$HTTP_REFERER,
$url
);
// custom query function ~ prepare/execute
$this->query("
INSERT INTO exits(ip, url_in, url_out) VALUES (?, ?, ?)
", "sss", $params);
}
Run Code Online (Sandbox Code Playgroud)
问题是,今天当我登录管理面板检查我今天有多少访问者以及他们从我的网站离开了哪里时,我收到了大量警报.当我检查我的数据库时,我有13500个从相同的IP退出到不同的页面,但问题来自该url_in领域,这里有一些例子:
ip | url_in | url_out |
-----------+-------------------------------------+---------------|
xx.xx.xx |'"></a><script>alert(11779)</script> | xxxxxxxxxxxxx |
-----------+-------------------------------------+---------------|
xx.xx.xx | ,alert(11774), | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %c0%a7 | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %2527 | xxxxxxxxxxxxx …Run Code Online (Sandbox Code Playgroud) 我具有TARGET网站数据库和SQLMap 的凭据,可以直接连接到数据库。这是我在Kali Linux上有关SQLMap的命令
sudo sqlmap -d mysql://USER:PASSWORD@TARGET_IP:MySQL_Port/DATABASE
Run Code Online (Sandbox Code Playgroud)
例
sudo sqlmap -d mysql://admin:12345@95.12.45.12:3306/information_schema
Run Code Online (Sandbox Code Playgroud)
但这是我每次都遇到的错误
[CRITICAL] SQLAchemy connection issue ('(_mysql_exceptions.OperationalError)
(1045, "Access denied for user 'admin'@'17.45.65.11' (using password: YES)")')
Run Code Online (Sandbox Code Playgroud)
该IP 17.45.65.11是我的IP ofc,拒绝了
那么我的命令有问题吗?
还是有人知道使用凭证直接连接到目标数据库的更好方法?
我在私有VM上尝试了SQL注入并使用了sqlmap.不知怎的命令:
sqlmap -u http://link/index.html?page=blog&title=Blog&id=5 --random-agent
Run Code Online (Sandbox Code Playgroud)
给我:
[2] 16
[3] 17
-bash: --random-agent: command not found
[1] Done sqlmap -u http://link/index.html?page=blog
[3]+ Done title=Blog
Run Code Online (Sandbox Code Playgroud)
但是首先把--random-agent和-u第二个以某种方式工作但是然后sqlmap问我:
[20:29:29] [CRITICAL] heuristics detected that the target is protected by some kind of WAF/IPS/IDS
do you want sqlmap to try to detect backend WAF/IPS/IDS? [y/N] y
-bash: y: command not found
[1]+ Stopped sqlmap --random-agent -u http://link/index.html?page=blog
[2] Done title=Blog
Run Code Online (Sandbox Code Playgroud)
为什么我不能输入y,为什么我必须在-u前面添加选项
更新,升级和重新安装不起作用.